.NET 除了用 Task 之外,如何自己写一个可以 await 的对象?

本文详细介绍了如何在.NET中创建自定义的Awaiter,使其能够用于await关键字进行异步等待。首先,通过实现INotifyCompletion接口和GetResult方法创建基本框架。然后,通过调用 continuation 参数并在异步任务完成后通知它来实现异步Awaiter。最后,通过示例展示了如何使用自定义Awaiter实现异步操作,如模拟walterlv写博客的过程。
摘要由CSDN通过智能技术生成

.NET 中的 async / await 写异步代码用起来真的很爽,就像写同步一样。我们可以在各种各样的异步代码中看到 Task 返回值,这样大家便可以使用 await 等待这个方法。不过,有时需要写一些特别的异步方法,这时需要自己来实现一个可以异步等待的对象。

本文将讲述如何实现一个可等待对象,一个自定义的 Awaiter。


Awaiter 系列文章

入门篇:

实战篇:

可等待对象

我们希望大家在调用下面的 CallWalterlvAsync 方法的时候,可以使用 await 关键字来异步等待:

await CallWalterlvAsync();
public WalterlvOperation CallWalterlvAsync()
{
   
    // 返回一个 WalterlvOperation,以便外面调用方可以异步等待。
    return new WalterlvOperation();
}

所以我们需要实现一个 WalterlvOperation

编写基本的 Awaiter 框架代码

先写一个空的类型,然后为它编写一个空的 GetAwaiter 方法,返回新的 WalterlvAwaiter 类型。

/// <summary>
/// 委托 walterlv 来完成一项特殊的任务。
/// 通过在代码当中调用,可以让他在现实中为你做一些事情。
/// </summary>
public class WalterlvOperation
{
   
    public WalterlvAwaiter GetAwaiter()
    {
   
        return new WalterlvAwaiter();
    }
}

接着,我们编写 WalterlvAwaiter 类:

public class WalterlvAwaiter : INotifyCompletion
{
   
    public bool IsCompleted 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值