Сообщение Почему не отменяется задача? от 15.03.2021 18:15
Изменено 15.03.2021 20:36 Passerby
Почему не отменяется задача?
Если с сервера долго не приходят данные нужно подать сигнал.
Имитировал сервер циклом, если данные приходят (новый цикл), то должен отменяться оператор
Почему отмены нет?
Имитировал сервер циклом, если данные приходят (новый цикл), то должен отменяться оператор
Console.WriteLine("Обработка закончена " + DateTime.Now);
Почему отмены нет?
static async Task Main(string[] args)
{
CancellationTokenSource cts = new CancellationTokenSource();
Task task = null;
for(int i=0; ;)
{
if (i != 0)
{
cts.Cancel();
Thread.Sleep(10);
task.Dispose();
}
cts = new();
task = SignalNoServer(cts.Token);
}
}
static async Task SignalNoServer(CancellationToken ct)
{
var v = Task.Delay(2000, ct);
v.Wait(ct);
if (!v.IsCanceled) Console.WriteLine("Обработка закончена " + DateTime.Now);
//или другой вариант, в котором тоже нет отмены
//if (!ct.IsCancellationRequested) Console.WriteLine("Обработка закончена " + DateTime.Now);
v.Dispose();
}
Почему не отменяется задача?
Если с сервера долго не приходят данные нужно подать сигнал.
Имитировал сервер циклом, если данные приходят (новый цикл), то должен отменяться оператор
Почему отмены нет?
Имитировал сервер циклом, если данные приходят (новый цикл), то должен отменяться оператор
Console.WriteLine("Обработка закончена " + DateTime.Now);
Почему отмены нет?
static async Task Main(string[] args)
{
CancellationTokenSource cts = new CancellationTokenSource();
Task task = null;
for(int i=0; ;)
{
if (i != 0)
{
cts.Cancel();
Thread.Sleep(10);
task.Dispose();
}
cts = new();
task = SignalNoServer(cts.Token);
}
}
static async Task SignalNoServer(CancellationToken ct)
{
var v = Task.Delay(2000, ct);
v.Wait(ct);
if (!v.IsCanceled) Console.WriteLine("Обработка закончена " + DateTime.Now);
//или другой вариант, в котором тоже нет отмены
//if (!ct.IsCancellationRequested) Console.WriteLine("Обработка закончена " + DateTime.Now);
v.Dispose();
}