我試圖加載測試API。我正在執行一個任務,每個執行一個HTTP請求。我使用Task.WhenAll(mytasks)
等待所有任務完成。請求看起來如下:執行超過1000個HTTP請求任務失敗
using (var response = await client.SendAsync(request).ConfigureAwait(false))
{
using (var jsonResponse = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
{
var jsonSerializer = new DataContractJsonSerializer(typeof(Borders));
var borders = (Borders)jsonSerializer.ReadObject(jsonResponse);
return borders;
}
}
這可以正常工作至少一千個任務。但是,如果我開始更多的則幾千元的任務我碰上HttpRequestExceptions
:
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
--- End of inner exception stack trace ---
at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at BusinessLogic.<GetBorder>d__6d.MoveNext() in c:\BusinessLogic.cs:line 757
所以我的問題:爲什麼會發生這種情況(超過1000級的任務)?我怎樣才能防止這一點?我能明顯把我的任務塊成塊< 1000,但我想離開這個基礎系統...
您正在使用IIS在Windows 7或8上進行測試? – Max
例外情況'現有連接被遠程主機強行關閉'可能是正在發生的事情的線索。 – Micke
@Max:Windows Server 2008 R2;沒有IIS,我正在使用自託管的ASP.NET Web API – Dunken