返回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 之间的真正区别是啥? [复制]

在 Python 中使用 range() 和 xrange() 之间的区别 [重复]

不同的任务方法的工作方式不同[重复]

这两种方法有啥区别?

为啥看和说序列的这两种实现有不同的执行时间?