.NET 编写一个可以异步等待循环中任何一个部分的 Awaiter


林德熙 小伙伴希望保存一个文件,并且希望如果出错了也要不断地重试。然而我认为如果一直错误则应该对外抛出异常让调用者知道为什么会一直错误。

这似乎是一个矛盾的要求。然而最终我想到了一个办法:让重试一直进行下去,谁需要关心异常谁就去 catch 异常,不需要关心异常的模块则跟着一直重试直到成功。

我们通过编写一个自己的 Awaiter 来实现,本文将说明其思路和最终实现的代码。


本文内容

      • Awaiter 系列文章
      • 遇到了什么问题
      • 思路
      • 关于源代码说明
        • 期望如何使用这个新的 Awaiter
        • 写一个可以不断循环的循环,并允许不同业务加入等待
        • 写一个可等待对象,针对不同业务返回不同的可等待对象实例
      • 附全部源码

.NET 中什么样的类是可使用 await 异步等待的?
  • 定义一组抽象的 Awaiter 的实现接口,你下次写自己的 await 可等待对象时将更加方便
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • 实战篇:

    • 在 WPF/UWP 中实现一个可以用 await 异步等待 UI 交互操作的 Awaiter
    • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter

    https://gist.github.com/walterlv/d2aecd02dfad74279713112d44bcd358 查看和下载到最新版本。

    .NET 中什么样的类是可使用 await 异步等待的?
  • 定义一组抽象的 Awaiter 的实现接口,你下次写自己的 await 可等待对象时将更加方便
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • 以及实战篇章:

    • 在 WPF/UWP 中实现一个可以用 await 异步等待 UI 交互操作的 Awaiter
    • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter

    这几个类的实际代码可以在文末查看和下载。

    如果你看不到源码,请前往 gist.github.com


    我的博客会首发于 https://walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://blog.csdn.net/wpwalter),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。