我正在研究如何使用async await,但是当我们有多个方法互相调用时,我并不太明白。我们应该总是使用await,还是只有在我们真正准备好使用结果时才使用await?
例如,我们应该像这样做:
async Task<string[]> FooAsync()
{
var info = await Func1();
return info.split('.');
}
async Task<string> Func1()
{
return await Func2();
}
async Task<string> Func2()
{
return await tcpClient.ReadStringAsync();
}
async Task<string[]> FooAsync()
{
var info = await Func1();
return info.split('.');
}
Task<string> Func1()
{
return Func2();
}
Task<string> Func2()
{
return tcpClient.ReadStringAsync();
}
根据示例1,我们是否应该在每个方法中都使用await?
还是
根据示例2,我们仅在开始使用结果时才在最上层的方法中使用await?
await
时,都会创建一段代码并通过状态机运行。通过 返回 一个 任务,有时可以提高效率。但是,在某些情况下,您可能希望检查返回的任务(将被 awaited)是否存在任何异常。我认为,从这里开始,您应该查看 Stephen Cleary 和 Stephen Toubs 关于异步和等待模式的博客。 - TheGeneralawait
,只需返回该值即可。但是调试会变得有点困难,因为您无法在调试期间在Func2
本身中检查返回值,也无法在本地处理异常。 - Panagiotis Kanavos优先使用 async/await,而不是直接返回 Task
。 - kapsiR