对于一个可怕的头衔,我只是想确认我做出了正确的假设。
假设我有3种方法简化为:
public async Task Method1()
{
var obj = await Method2();
//do work on obj
}
public Task<object> Method2()
{
//do some work
return Method3();
}
public async Task<object> Method3()
{
//do async work
return obj;
}
上面的 Method2
内部没有异步工作,但是在我的异步堆栈中。它可以改写为:
public async Task<object> Method2()
{
//do some work
return await Method3();
}
我是否正确,因为Method2
实际上并不执行异步工作,最好将其保留为非异步方法?我的想法是,我节省了创建额外状态机的开销,以便在不需要时保存线程的资源。
答案 0 :(得分:0)
正确。如果方法不需要等待任何结果(即,消耗任务的结果或等待任务完成,则可以直接从方法返回Task
而不添加async/await
关键字能够做一些执行)。然后,呼叫堆栈中的呼叫者可以等待返回的任务。这可以节省一些开销,并使略微更少的代码(虽然代码量实际上是微不足道的)。
您经常通过传递或便利方法看到这一点。