, основанного на том, что я прочитал на MSDNасинхронный ждет и нарезания резьба
Асинхронных и жду ключевых слова не вызывают дополнительные нити, чтобы быть созданы. Асинхронные методы не требуют многопоточности, поскольку метод async не запускается в своем потоке. Метод работает в текущем контексте синхронизации и использует время в потоке только тогда, когда активен метод . Вы можете использовать Task.Run, чтобы переместить работу, связанную с процессором, на фоновый поток , но фоновый поток не помогает с процессом , который просто ждет, когда результаты станут доступными.
В основном говорят, что нить не будет создана. Но внутри класса, который я унаследовал HttpClient
я нашел что-то интересное ..
async Task<T> SendAsync<T>(HttpMethod method, Uri uri, HttpContent content, CancellationToken cancellationToken)
{
HttpRequestMessage msg = new HttpRequestMessage(method, uri);
msg.Content = content;
//On Main Thread
HttpResponseMessage response = await SendAsync(msg, cancellationToken);
//On worker thread
//...
}
метод вызывается внутри static void Main
Task result = client.GetAsync<string>(...);
//GetAsync calls await SendAsync<T>
result.Wait();
Почему я в отдельном потоке после await SendAsnc
вызова ?? Я думал, что асин не создает новую нить. Или, по крайней мере, он будет вызван обратно в исходный поток после ожидания.
Если у вас нет * есть * контекст синхронизации, то продолжение из метода async будет выполняться в потоке threadpool. Консольные приложения (которые я предполагаю это, поскольку вы ссылаетесь на «Main()») по умолчанию не имеют контекста синхронизации. –