Во время моего чтения о асинхронном программировании в ключевых словах .Net 4.5 async
и await
Я прочитал здесь в следующем абзаце
Обработка асинхронных запросов
В веб-приложениях, которые видят большое количество одновременных запросов в пуск или имеет взрывную нагрузку (где concurrency внезапно увеличивается), асинхронность этих веб-сервисов приведет к увеличению отзывчивость вашего приложения. Выполняется асинхронный запрос такое же количество времени для обработки как синхронный запрос. Для Например, если запрос вызывает вызов веб-службы, который требует двух секунд для завершения, запрос занимает две секунды, независимо от того, выполняется синхронно или асинхронно. Однако во время асинхронный вызов, поток не блокируется от ответа на другой когда он ждет завершения первого запроса. Следовательно, асинхронные запросы предотвращают очередь запросов и рост пула потоков когда есть много параллельных запросов, которые вызывают длительный операции.
для жирных слов, я не мог понять их, как асинхронный запрос занимает столько же времени, сколько и для синхронного запроса?
Например:
public async Task MyMethod()
{
Task<int> longRunningTask = LongRunningOperation();
//indeed you can do independent to the int result work here
//and now we call await on the task
int result = await longRunningTask;
//use the result
Console.WriteLine(result);
}
public async Task<int> LongRunningOperation() // assume we return an int from this long running operation
{
await Task.Delay(1000); //1 seconds delay
return 1;
}
Что я понимаю, что LongRunningOperation()
запускает выполнение из первой строки, вызывающей здесь Task<int> longRunningTask = LongRunningOperation();
, и возвращает значение после вызова await
,
поэтому, с моей точки зрения, асинхронный код быстрее, чем синхронный, верно?
Другой вопрос:
Я понимаю, что основной поток, работающий над выполнением MyMethod()
не заблокирован, ожидая выполнения LongRunningOperation()
, чтобы выполнить, но он возвращается в пул потоков, чтобы обслуживать другой запрос. так есть ли другой поток, назначенный LongRunningOperation();
для его выполнения?
Если да, то в чем разница между асинхронным программированием и программированием многопоточности?
Update:
скажем, что код становится таким:
public async Task MyMethod()
{
Task<int> longRunningTask = LongRunningOperation();
//indeed you can do independent to the int result work here
DoIndependentWork();
//and now we call await on the task
int result = await longRunningTask;
//use the result
Console.WriteLine(result);
}
public async Task<int> LongRunningOperation() // assume we return an int from this long running operation
{
DoSomeWorkNeedsExecution();
await Task.Delay(1000); //1 seconds delay
return 1;
}
В этом случае будет выполняться LongRunningOperation()
другим потоком во время выполнения DoIndependentWork()
?