以下Func <Task <T >>异步委托方法之间的区别是什么?

RPM*_*984 9 c# async-await

如果我有以下方法:

public async Task<T> DoSomethingAsync<T>(Func<Task<T>> action)
{
   // bunch of async code..then "await action()"
}
Run Code Online (Sandbox Code Playgroud)

以下两种用法有什么区别:

public async Task MethodOneAsync()
{
   return await DoSomethingAsync(async () => await SomeActionAsync());
}

public async Task MethodTwoAsync()
{
   return await DoSomethingAsync(() => SomeActionAsync());
}
Run Code Online (Sandbox Code Playgroud)

两个编译..都工作..没有R#警告......

有什么区别(如果有的话)?如果调用者等待,两个方法是否都会运行async?

dvo*_*orn -1

Async/await 构造插入一些基础结构代码,这些代码仅在“await”之后有一些代码时才有用。否则它基本上什么也不做。你的代码相当于

public Task MethodThreeAsync()
{
    return DoSomethingAsync(() => SomeActionAsync());
}
Run Code Online (Sandbox Code Playgroud)

所有这三种方法都是“真正的异步”。

  • 由“await”调用生成的基础设施代码还确保了异常报告中的堆栈帧。如果您依赖“Exception.StackTrace”进行调试,则应该使用“await”,而不仅仅是返回任务。 (2认同)