Так как я могу отменить эту задачу с обработкой этой ошибки.
Вы уже отменяете задачу;вам просто нужно обработать ошибку:
try
{
await Task.Delay(60000, token);
}
catch (OperationCanceledException)
{
}
...
На самом деле администратор получает сигналы от службы wcf, в которой, если администратор не получит ожидаемые сигналы от wcf, он будет ждать 60 секунд, а если администратор будетполучить ожидаемое количество сигналов в первые 10 секунд, после чего не нужно ждать следующих 50 секунд.
Похоже, что вы хотите, это сигнал , а не аннулирование .Вы хотите (асинхронно) ждать либо сигнала, либо периода времени (задержки), после которого вы хотите предпринять некоторые действия.Вы действительно не хотите отмены здесь.
Один вид асинхронного сигнала - TaskCompletionSource<T>
.Ваш код действия может await
Task
этого TCS, а код сигнализации может позвонить SetResult
для отправки сигнала.Как то так:
public static TaskCompletionSource<object> signal = new TaskCompletionSource<object>();
...
signal.SetResult(null);
...
public static async Task waitForSignal(Task signalTask)
{
await Task.WhenAny(Task.Delay(60000), signalTask);
}