加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

等待和等待在C#5.0异步

发布时间:2020-12-16 05:58:44 所属栏目:百科 来源:网络整理
导读:任务或任务 TResult对象是等待的,所以我们可以在返回值为Task或Task TResult的那些上使用等待键. 任务或任务 TResult是最常用的等待对象. 我们也可以定义我们自己的等待对象.对象应具有以下资格. 它有一个GetAwaiter()方法(实例方法或扩展方法); 它的GetAwai
任务或任务< TResult>对象是等待的,所以我们可以在返回值为Task或Task< TResult>的那些上使用等待键.
任务或任务< TResult>是最常用的等待对象.

我们也可以定义我们自己的等待对象.对象应具有以下资格.

>它有一个GetAwaiter()方法(实例方法或扩展方法);
>它的GetAwaiter()方法返回一个等待程序.一个对象是一个等待者
如果:

>它实现INotifyCompletion或ICriticalNotifyCompletion
接口;
>它有一个IsCompleted,它有一个getter并返回一个布尔值;
>它有一个GetResult()方法,它返回void或一个结果.

我的问题是,为什么微软没有提供一个接口来约束这些等待对象?
目前实现等待对象的方法有点复杂.

解决方法

最好在Lucian Wischik的博客文章 Why must async methods return Task?中回答

总而言之(我不是在博客正义,你应该读它),问题是,任务已经存在,所以介绍一个界面将意味着

>所有的内部方法都需要改变到界面,一个突破性的变化,因此框架人们愿意做的几乎是不可能的.
>作为程序员,您将不断需要决定是否要返回任务或界面,这一决定并不重要.
>编译器总是需要一个具体的类型,所以即使你从一个方法返回一个接口,那么它仍然被编译为Task.

上面的影响是如此巨大,提供一个界面是没有意义的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读