CLR via C# 笔记 ----Task(任务) 2

Task的取消

CancellationTokenSource用来取消Task,可以为Task的构造函数传递一个此类的实例。

当调用实例的cancel方法时,Task会被提意取消

为何说是提意,因为取消是协作式的,也就是说你这边提意了,Task的工作函数里还必须显示的写一点响应逻辑才能真正的取消执行。在工作函数内部,通常在一个循环内,持续调用CancellationTokenSource实例的token的ThrowIfCancellationRequested()方法来确实的执行任务的取消。而工作函数中的source实例 需要通过参数传递,或者lamda捕捉。

在获取结果的代码里可以捕捉到这个异常,从而知晓任务被取消了

另外,如果一个任务还没有开始,就调用了和他关联的tokenSource的cancel的话 任务会被标记为已经完成(Result会抛出异常)

猜你喜欢

转载自blog.csdn.net/zwlstc/article/details/85149234