【发布时间】:2019-10-08 11:34:28
【问题描述】:
我创建了一个小演示项目来帮助我了解如何使用取消令牌。我了解您取消了令牌并检查是否已请求取消,但是有没有办法可以检查取消是否已实现?在下面的示例中,我不想在 DoWork() 完成运行之前再次运行 Work()。
public class Program
{
public static CancellationTokenSource tokenSource;
private static void Main(string[] args)
{
while (true)
{
Work();
}
}
public static async void Work()
{
tokenSource = new CancellationTokenSource();
Console.WriteLine("Press any key to START doing work");
Console.ReadLine();
Console.WriteLine("Press any key to STOP doing work");
DoWork(tokenSource.Token);
Console.ReadLine();
Console.WriteLine("Stopping...");
tokenSource.Cancel();
}
public static async void DoWork(CancellationToken cancelToken)
{
while (true)
{
Console.WriteLine("Working...");
await Task.Run(() =>
{
Thread.Sleep(1500);
});
if (cancelToken.IsCancellationRequested)
{
Console.WriteLine("Work Cancelled!");
return;
}
}
}
}
【问题讨论】:
-
不要使用
async void。使用async Task。生成的Task可以等待(如果被取消则抛出异常)或根据需要显式检查是否完成。
标签: c# asynchronous cancellationtokensource