【问题标题】:Difference between those two methods returning Task [duplicate]返回Task的这两种方法之间的区别[重复]
【发布时间】:2016-11-29 23:35:14
【问题描述】:

这两种方法在语义上有什么区别?

    public Task DoSomething()
    {
        return Task.Run(() => MyFunction());
    }

    public async Task DoSomethingAsync()
    {
        await Task.Run(() => MyFunction());
    }

我应该考虑在其中一个或另一个之间进行选择吗?

【问题讨论】:

  • 这是一个库/框架还是基于特定框架构建的应用程序
  • 异常传播和同步上下文处理有很大区别,请查看this

标签: c# async-await


【解决方案1】:

实际区别是这样的:

  1. 第一个方法会调用Task.Run并返回结果任务
  2. 第二种方法将被转换为异步状态机,该状态机将调用Task.Run,然后排队一个延续,当此任务完成时,将继续执行您的方法

就“我应该选择哪一个”而言,这是我使用的一般准则:

如果与任务相关的所有方法都是返回它们,那么不要使用async/await
相反,如果您需要“等待”任务完成,然后做更多的事情,然后使用async/await

我确信这有例外,但我还没有找到任何例外。

所以在这两种方法中,选择第一种。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
相关资源
最近更新 更多