栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

返回void和返回Task有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

返回void和返回Task有什么区别?

SLaks和Killercam的答案很好。我以为我会添加更多上下文。

您的第一个问题实质上是关于可以标记哪些方法

async

标为A的方法

async
可以返回
void
Task
Task<T>
。它们之间有什么区别?

一个

Task<T>
返回异步方法可以等待,并在任务完成时,它会毫无顾忌了一个T.

一个

Task
返回异步方法可以等待,而当任务完成时,任务的延续计划运行。

void
返回异步方法不能等待;
这是一种“忘了忘了”的方法。它确实是异步工作的,您无法知道何时完成。这有点奇怪。正如SLaks所说,通常只有在创建异步事件处理程序时才这样做。事件触发,处理程序执行;没有人会“等待”事件处理程序返回的任务,因为事件处理程序不会返回任务,即使它们返回了,什么代码也可以将任务用于某些任务?首先,通常不是用户代码将控制权转移到处理程序。

在评论中,您的第二个问题实质上是关于可以

await
编辑的内容:

可以采用哪种方法

await
?可以采用空洞归位法
await
吗?

不可以,无法等待返回空隙的方法。编译器将转换

awaitM()
为对的调用
M().GetAwaiter()
,其中
GetAwaiter
可能是实例方法或扩展方法。等待的价值必须是您可以获得等待者的价值;显然,返回空值的方法不会产生可用于获取等待者的值。

Task
-返回方法可以产生等待的值。我们期望第三方将希望创建自己的
Task
可以等待的对象的实现,而您将能够等待它们。然而,你将不会被允许申报
async
方法是什么回报,但是
void
Task
还是
Task<T>

(更新:我的最后一句话可能被C#的未来版本所伪造;有人建议允许异步方法的任务类型以外的返回类型。)

(更新:上面提到的功能使它进入了C#7。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405361.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号