【异步编程 笔记】【取消Task】

167 阅读1分钟

取消Task

  • CancellationTokenSourceCancellationToken 成对使用
  • CancellationToken,被传给异步操作

示例

一个search button,既当搜索按钮使用,也当取消按钮使用,职能点一下就相互切换。

Image.png

Image.png

Image.png


要将 CancellationTokenSource.Token 传给异步方法SearchForStocks()

传Token:

Image.png


第一种写法:

  • 可以在cancel 后,在cancellationToken所在处扔一个exception, 如下:

Image.png


第二种写法:

  • 也可以通过CancellationToken 来检查当下有没有发出cancellation的request, 如下:

Image.png


传给Task 和 Continuation的当作入参传入的token到底有什么用呢?

我目前理解为:

  • 如果这个Task或者continuation还没有开始执行,入参token就可以直接将其cancel掉。
  • 如果这个Task或者continuation 已经开始执行了,那么就要自己在task或者continuation里面写响应的逻辑来应对cancel。比如说上面提到的两种办法:
    • 一扔exception
    • 二检查确实是cancel了之后采取相应措施

Image.png

Image.png

Token的Register()方法:

Image.png

HttpClient 取消Task的示例

Image.png

Image.png