这两个方法返回Task的区别

Fra*_*zzi 3 c# async-await

这两种方法之间的语义差异是什么?

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

    public async Task DoSomethingAsync()
    {
        await Task.Run(() => MyFunction());
    }
Run Code Online (Sandbox Code Playgroud)

有什么我应该考虑在一个或另一个之间做出选择吗?

ang*_*son 7

实际差异是这样的:

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

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

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

我相信这有例外,但我还没有找到.

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