C# 返回任务的两种方法之间的差异

C# 返回任务的两种方法之间的差异,c#,async-await,C#,Async Await,这两种方法在语义上有什么区别 public Task DoSomething() { return Task.Run(() => MyFunction()); } public async Task DoSomethingAsync() { await Task.Run(() => MyFunction()); } 我是否应该在两者之间做出选择?实际的区别在于: 第一个方法将调用任务。运行并返回结果任

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

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

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

我是否应该在两者之间做出选择?

实际的区别在于:

  • 第一个方法将调用
    任务。运行
    并返回结果任务
  • 第二个方法将转换为一个异步状态机,该状态机将调用
    任务。运行
    ,然后将一个延续排队,当该任务完成时,该延续将继续执行您的方法
  • 关于“我应该选择哪一个”,以下是我使用的一般准则:

    如果所有与任务相关的方法都是返回它们,那么不要使用
    async/await

    相反,如果您需要“等待”任务完成,则需要执行更多操作,然后使用
    async/await

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


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

    这是一个库/框架还是一个基于特定框架构建的应用程序在异常传播和同步上下文处理方面有很大的不同,请检查。所以在上面的示例中,第一种方法在这种情况下更好?@EhsanSajjad,是的,它更好。。。