我正在编写一个包装第三方Web服务调用的库,并尝试使该库使用新的async/await功能。以下示例中async/await关键字的正确用法是什么?
public class MyApi
{
public Task<ApiResult> DoSomethingAsync()
{
return this.DoSomethingCore();
}
public async Task<ApiResult> DoSomethingElseAsync()
{
return await this.DoSomethingCore();
}
private async Task<ApiResult> DoSomethingCore()
{
var httpClient = new HttpClient();
var httpResponseMessage = await httpClient.GetAsync("some url");
var rawResultText = await httpResponseMessage.Content.ReadAsStringAsync();
return new ApiResult(rawResultText);
}
}
为了让我的调用者能够等待DoSomethingAsync方法,我是否需要在该方法中添加async和await关键字?还是直接返回Task就可以了?在这种嵌套情况下,有更好的模式吗?
我认为使用DoSomethingAsync方法是正确的选择,这样做是否正确?我认为在构建库时,使用DoSomethingElseAsync似乎是错误的方法。
public Task<ApiResult> DoSomethingElse()
并且只需返回this.DoSomethingCore();
?基本上,既然它没有使用await
,所以不需要使用async
关键字,因此他不应该将方法命名为DoSomethingElseAsync()
。这正确吗?这很明显是为了澄清命名约定,我知道这不是语法问题。 - AndyAsync
后缀是一种约定,它表明它被设计为由await
使用,而不是用await
实现。因此,即使DoSomethingElseAsync
不使用async
/await
,它仍应该使用Async
后缀。 - Stephen Cleary