Я хочу создать цикл для тестирования веб-клиента.У меня есть HttpClient, и я хочу отправлять 100 запросов, один раз в 3 секунды.
Моя функция отправки запроса (async Task
из-за PostAsync
):
private static async Task SendRequestAsync(HttpClient client, int taskID)
{
try
{
String xmlData = GetXmlData();
var content = new StringContent(xmlData);
HttpResponseMessage response = await client.PostAsync("sendRequest.ashx?RequestId=" + taskID, content);
// write response in a file
}
catch (Exception e)
{
}
}
Теперь я хочу:
- создать цикл с 100 итерациями
- вызывать метод на каждой итерации
- ждать всех задач после цикла
Я написал кусок кода.Это работает, но у меня есть TaskCanceledException
после некоторой итерации (не всегда то же самое):
List<Task> listTask = new List<Task>();
using (HttpClientHandler handler = new HttpClientHandler())
{
HttpClient client = new HttpClient(handler)
{
BaseAddress = new Uri(urlRequest)
};
client.DefaultRequestHeaders.Accept.Clear();
int cpt = 0;
while (cpt < 100)
{
cpt++;
int tmp = cpt;
listTask.Add(Task.Run(() => SendRequestAsync(client, tmp)));
Thread.Sleep(3000);
}
}
Task.WaitAll(listTask.ToArray());
Что вызывает TaskCanceledException
и как я могу это исправить?
EDIT
После некоторых исследований я обнаружил, что у меня есть System.ObjectDisposedException
в объекте System.Net.Sockets.NetworkStream
, но я не могу определить поток, выбрасывающий это исключение.
Есть ли способ, которым это исключение пришло из моего HttpClientHandler handler
?В таком случае, как я могу воссоздать объект, чтобы продолжить цикл?