.NET HTTPClient Асинхронные ограничения
У меня есть небольшое приложение .Net 4.5 C #, которое считывает информацию из источника данных, а затем отправляет эту информацию на веб-сайт, который представляет собой сайт .NET 4.5 Web API с простым контроллером. Контроллер получает данные и помещает их в базу данных.
Следующее работает для меня, настолько быстро, насколько приложение может прочитать, оно может написать, и все заканчивается в БД:
public static void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = client.PostAsJsonAsync("/api/Station/Collector", tData).Result;
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
Следующее НЕ работает. Он отправляет около тысячи с лишним записей, а затем выдает несколько ошибок с сообщением «задача была отменена», но затем примерно через 10 секунд возобновляет обработку:
public static async void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = await client.PostAsJsonAsync("/api/Station/Collector", tData);
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
Полная ошибка:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at IICE_DataCollector_Remote.Program.<PostDataToWebApi>d__7.MoveNext() in e:\Users\TestUser.TEST\Documents\Visual Studio 2012\Projects\Test_App-trunk\TestCollector\Program.cs:line 475
Какие-нибудь быстрые решения для этого? Из того, что я могу сказать, у него кончается что-то, потоки, сокеты, кто знает :-)
Любые указатели будут оценены, я бы хотел, чтобы это работало, поскольку вы можете представить, что синхронное выполнение POST значительно медленнее, чем асинхронное.
Просто чтобы быть уверенным, что это не моя машина, локальный антивирус или сеть, которые я пробовал на сервере W2k8 R2, виртуальном гостевом рабочем столе Windows 7 (свежая сборка) и машине с Windows 8, с тем же результатом.
Больше информации Я проверил это с частичным успехом при подключении к локальной сети с меньшим набором данных (10 000 записей) и DefaultConnectionLimit, равным 100. Но при работе с 500 000 записей при отправке на удаленный сервер через Интернет (все еще низкая задержка 25 мс -50мс) У меня не было никакого успеха.
Заранее благодарю за любую помощь :-)