有没有这样的写作方法:
public async Task<SomeResult> DoSomethingAsync()
{
// Some synchronous code might or might not be here... //
return await DoAnotherThingAsync();
}
而不是这样:
public Task<SomeResult> DoSomethingAsync()
{
// Some synchronous code might or might not be here... //
return DoAnotherThingAsync();
}
有意义吗?
为什么使用返回等待构造时,你可以直接返回任务<T>从内部DoAnotherThingAsync()调用?
我在很多地方看到等待返回的代码,我想我可能错过了一些东西。但据我所知,在这种情况下不使用async/await关键字,直接返回任务在功能上是等效的。为什么要增加额外等待层的额外开销?
这也让我感到困惑,我觉得之前的回答忽略了你的实际问题:
当你可以直接从内部DoAnotherThingAsync()调用返回任务时,为什么要使用返回等待构造?
有时候你需要Task<SomeType>,但大多数时候你需要SomeType的实例,也就是说,任务的结果。
从你的代码:
async Task<SomeResult> DoSomethingAsync()
{
using (var foo = new Foo())
{
return await foo.DoAnotherThingAsync();
}
}
不熟悉语法的人(例如我)可能认为这个方法应该返回Task<SomeResult>,但是由于它被标记为async,这意味着它的实际返回类型是SomeResult。
如果你只是使用return foo.DoAnotherThingAsync(),你将返回一个任务,它不会编译。正确的方法是返回任务的结果,因此返回等待。
这也让我感到困惑,我觉得之前的回答忽略了你的实际问题:
当你可以直接从内部DoAnotherThingAsync()调用返回任务时,为什么要使用返回等待构造?
有时候你需要Task<SomeType>,但大多数时候你需要SomeType的实例,也就是说,任务的结果。
从你的代码:
async Task<SomeResult> DoSomethingAsync()
{
using (var foo = new Foo())
{
return await foo.DoAnotherThingAsync();
}
}
不熟悉语法的人(例如我)可能认为这个方法应该返回Task<SomeResult>,但是由于它被标记为async,这意味着它的实际返回类型是SomeResult。
如果你只是使用return foo.DoAnotherThingAsync(),你将返回一个任务,它不会编译。正确的方法是返回任务的结果,因此返回等待。