Информация об изменениях

Сообщение Почему не отменяется задача? от 15.03.2021 18:15

Изменено 15.03.2021 18:18 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);
        }
        cts = new();
        task = SignalNoServer(cts.Token);
        if (task != null) task.Dispose();
      }
}
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);
        }
        cts = new();
        task = SignalNoServer(cts.Token);
        if (task != null) task.Dispose();
      }
}
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();
    }