取消Task
CancellationTokenSource
和CancellationToken
成对使用CancellationToken
,被传给异步操作
示例
一个search button,既当搜索按钮使用,也当取消按钮使用,职能点一下就相互切换。
要将 CancellationTokenSource.Token
传给异步方法SearchForStocks()
传Token:
第一种写法:
- 可以在cancel 后,在cancellationToken所在处扔一个exception, 如下:
第二种写法:
- 也可以通过CancellationToken 来检查当下有没有发出cancellation的request, 如下:
传给Task 和 Continuation的当作入参传入的token到底有什么用呢?
我目前理解为:
- 如果这个Task或者continuation还没有开始执行,入参token就可以直接将其cancel掉。
- 如果这个Task或者continuation 已经开始执行了,那么就要自己在task或者continuation里面写响应的逻辑来应对cancel。比如说上面提到的两种办法:
- 一扔exception
- 二检查确实是cancel了之后采取相应措施