返回Task的这两种方法之间的区别[重复]
Posted
技术标签:
【中文标题】返回Task的这两种方法之间的区别[重复]【英文标题】:Difference between those two methods returning Task [duplicate] 【发布时间】:2016-11-29 23:35:14 【问题描述】:这两种方法在语义上有什么区别?
public Task DoSomething()
return Task.Run(() => MyFunction());
public async Task DoSomethingAsync()
await Task.Run(() => MyFunction());
我应该考虑在其中一个或另一个之间进行选择吗?
【问题讨论】:
这是一个库/框架还是基于特定框架构建的应用程序 异常传播和同步上下文处理有很大区别,请查看this。 【参考方案1】:实际区别是这样的:
-
第一个方法会调用
Task.Run
并返回结果任务
第二种方法将被转换为异步状态机,该状态机将调用Task.Run
,然后排队一个延续,当此任务完成时,将继续执行您的方法
就“我应该选择哪一个”而言,这是我使用的一般准则:
如果与任务相关的所有方法都是返回它们,那么不要使用
async/await
相反,如果您需要“等待”任务完成,然后做更多的事情,然后使用async/await
。
我确信这有例外,但我还没有找到任何例外。
所以在这两种方法中,选择第一种。
【讨论】:
所以在上面的例子中第一种方法在这种情况下更好? @EhsanSajjad,是的,它更好...***.com/documentation/c%23/26/keywords/5993/…以上是关于返回Task的这两种方法之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在C++种,关于指针的这两种表示有啥区别:double * a和double ** a?两个**是啥意思呢?
Thread.Sleep() 和 await Task.Delay 之间的真正区别是啥? [复制]