Как узнать, отменена ли задача таймаутом или ручным триггером?
Допустим, у меня есть следующие обработчики событий Start и Cancel. Как я узнаю, кто был тем, кто вызвал отмену?
private CancellationTokenSource cts;
private async void OnStartClick(object sender, RoutedEventArgs e)
{
try
{
cts = new CancellationTokenSource();
cts.CancelAfter(5000);
await Task.Delay(10000,cts.Token);
}
catch (TaskCanceledException taskCanceledException)
{
??? How do i know who canceled the task here ???
}
}
private void OnCancelClick(object sender, RoutedEventArgs e)
{
cts.Cancel();
cts.Dispose();
}
1 ответ:
Сохранить в поле, была ли нажата кнопка отмены или нет:
bool hasUserCancelled = false;
И сбросьте это поле перед началом работы:
hasUserCancelled = false; cts = new CancellationTokenSource(); cts.CancelAfter(5000);
Установите его в обработчике щелчка кнопки отмены:
private void OnCancelClick(object sender, RoutedEventArgs e) { hasUserCancelled = true; cts.Cancel(); cts.Dispose(); }
Информация, которую вы хотели, теперь доступна в catch:
catch (TaskCanceledException taskCanceledException) { Debug.WriteLine(new { hasUserCancelled }); }