【异步编程 笔记】【Continuation 如何使用】

102 阅读1分钟

初始示例

Image.png


可以有两种办法,来控制后续的执行:

  1. await loadLinesTask
  2. loadLinesTask 继续chain上 continuation

Image.png

Continuation

Image.png


TaskResult属性:用的时候有一个小建议,那就是确保在Task完成的情况下(成功或失败)再用。

这里continuation的定义保证了,此时调用t.Result是正确的,t 已经完成了


  • 不用传递Task时,可以用 _ =>{ }, 如下: Image.png

可以对 Task.Run 里面的 lamda 表达式 再使用 async

Image.png

只当成功时,执行Continuation

  • 个人理解:会TaskTask Image.png

continuation 是前面的 task 完成之后开始执行,完成 包括 成功完成 或者 因为exception而失败

这里task tException是一个aggregate exception, 我们还需要看它innerException来了解发生了什么问题

Image.png


解决上面的问题:

  • ContinuationOptions:
    • OnlyOnRanToCompletion: 没有exception和cancel
    • OnlyOnFaulted: 出错了
    • ... Image.png

Image.png


image.png

await和continuation在异常处理上的比较

image.png