從我的方法拿走await
關鍵字時,我比較性能,以及它給我過15倍更好的性能。異步取15倍長於同步
以下方法執行好得多:
private static async Task<HttpResponseMessage> AwaitResponse(HttpRequest proxy)
{
foreach (var header in proxy.Request.Headers)
{
Client.Instance.DefaultRequestHeaders.Add(header.Key, header.Value);
}
var response = Client.Instance.SendAsync(proxy.Request).Result;
return response;
}
不止這一個:
private static async Task<HttpResponseMessage> AwaitResponse(HttpRequest proxy)
{
foreach (var header in proxy.Request.Headers)
{
Client.Instance.DefaultRequestHeaders.Add(header.Key, header.Value);
}
var response = Client.Instance.SendAsync(proxy.Request);
return await response;
}
通知我如何打電話。結果在方法的第一個版本。
這究竟是爲什麼?爲什麼會有如此巨大的性能損失?
請注意,Client
僅僅是HttpClient
一個靜態實例。
1.說「x15增加」,但你沒有指定數字。這是10ms vs 150ms,還是200ms vs. 3000ms?這很重要。 2.是否有許多其他併發請求在同一時間執行類似的操作? 'await'放棄線程,並且必須將上下文編組回到它返回時的位置。如果有很多請求,你的線程池可能會很忙。 3.在'await'中添加'ConfigureAwait(false)'是否改變行爲? –
它會從1000到12000毫秒 –
沒有其他併發請求 –