c# – 如何知道超时或手动触发器是否取消了任务?

前端之家收集整理的这篇文章主要介绍了c# – 如何知道超时或手动触发器是否取消了任务?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有以下Start和Cancel事件处理程序.我如何知道触发取消的人是谁? @H_403_2@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(); }

解决方法

无论是否单击了取消按钮,都存储在字段中: @H_403_2@bool hasUserCancelled = false;

并在开始之前重置此字段:

@H_403_2@hasUserCancelled = false; cts = new CancellationTokenSource(); cts.CancelAfter(5000);

在取消按钮单击处理程序中设置它:

@H_403_2@private void OnCancelClick(object sender,RoutedEventArgs e) { hasUserCancelled = true; cts.Cancel(); cts.Dispose(); }

您想要的信息现在可以在catch中找到:

@H_403_2@catch (TaskCanceledException taskCanceledException) { Debug.WriteLine(new { hasUserCancelled }); }

猜你在找的C#相关文章