Bri*_*nga 15 c# async-await c#-5.0
我正在编写一个包含第三方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);
}
}
Run Code Online (Sandbox Code Playgroud)
为了让我的调用者等待DoSomethingAsync方法,该方法是否还要添加async和await关键字?或者它是否正常,因为它返回一个任务?这种嵌套有更好的模式吗?
我认为DoSomethingAsync方法是正确的方法,这是正确的吗?我相信DoSomethingElseAsync在构建库时似乎是错误的方法.
Ste*_*ary 12
任何人Task都可以等待,无论它来自哪里.
我不确定为什么DoSomethingAsync只是打电话DoSomethingCore,因为DoSomethingAsync可以很容易async和使用await.
还有一个一般的规则,你应该使用ConfigureAwait(false)在库方法.
编辑:如果您不需要使用await,则不要制作该方法async.async将增加一些开销(检查ChannelT for Stephen Toub的Zen of Async Performance视频).如果你可以返回Task(像DoSomethingAsync),那就这样做.