Пытаюсь сделать множество асинхронных запросов HttpWebRequest. Подготовил мини тест:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
public static async void Test()
{
for (int i = 0; i < 10; i++)
{
int val = i;
await Task.Run(() => WR(val));
}
}
static async void WR(int msg)
{
Console.WriteLine(msg + " begin");
string url = "https://stackoverflow.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
var response = (HttpWebResponse)await Task.Factory.FromAsync<WebResponse>
(request.BeginGetResponse, request.EndGetResponse, null);
Console.WriteLine(msg + " status code: " + response.StatusCode);
Console.WriteLine(msg + " end");
}
}
Но вот что получилось:
0 begin
1 begin
2 begin
3 begin
4 begin
5 begin
6 begin
7 begin
8 begin
9 begin
0 status code: OK
0 end
1 status code: OK
1 end
А после 1 end вообще ничего не происходит. Где-то через 30 секунд в output вылазит:
The thread 0x6634 has exited with code 0 (0x0).
The thread 0x5620 has exited with code 0 (0x0).
The thread 0x4d08 has exited with code 0 (0x0).
The thread 0x39b8 has exited with code 0 (0x0).
The thread 0x3454 has exited with code 0 (0x0).
The thread 0x99c has exited with code 0 (0x0).
The thread 0x6be0 has exited with code 0 (0x0).
Но никаких ошибок в дебаге не вываливается. Подскажите где я ошибся и как исправить?
UPDATE:
Затык происходит при запуске в Visual Studio. Интересно что с включенным Fiddler все работает нормально.
HttpClient, аHttpWebRequest. Что интересно, если использоватьHttpClientиawait client.GetAsync, то подобной проблемы с зависанием и отваливанием не происходит. – Denis Ross Sep 13 '18 at 20:30HttpClient, у него и асинхронные методы готовы из коробки – tym32167 Sep 13 '18 at 20:33Task.Runне нужен. Во всяком случае, неэффективен. – Alexander Petrov Sep 13 '18 at 21:13Task.WhenAllв виде ожидания пока все запросы пройдут и видимо перемудрил) Но суть в том что код ни у меня ни у вас не работает, хотя у других все норм. – Denis Ross Sep 13 '18 at 21:47