【发布时间】:2015-06-29 17:31:09
【问题描述】:
使用 c# HttpClient 发布数据,假设我也关心返回的内容。我正在优化我的应用程序并试图了解在同一方法中两次等待调用的性能影响。从下面的代码sn-p中跳出来的问题,
public static async Task<string> AsyncRequest(string URL, string data = null)
{
using (var client = new HttpClient())
{
var post = await client.PostAsync(URL, new StringContent(data, Encoding.UTF8, "application/json")).ConfigureAwait(false);
post.EnsureSuccessStatusCode();
var response = await post.Content.ReadAsStringAsync();
return response;
}
}
假设我在那里有错误处理:) 我知道 await 调用很昂贵,所以双重 await 引起了我的注意。
- 第一次等待完成后,POST 响应在内存中,直接返回结果会不会更高效,例如
var response = post.Content.ReadAsStringAsync().Result; - 在同一方法中进行两次 await/async 调用时有哪些性能注意事项?
- 上面的代码会导致每个 await 线程(2 个线程),还是返回 Task 的 1 个线程来处理两个 await 调用?
【问题讨论】:
-
1.没关系 2. 没有,它使用线程池,如果您的方法正在等待,则 PostAsync 可以采用 AsyncRequest 线程,所以没有区别 3. 线程池 :) 一个线程更改操作,但是 - 真的 - 它取决于JIT 编译器
-
与 HTTP 请求相比,await 的开销为零。
标签: c# performance asynchronous async-await dotnet-httpclient