@nikifovadim

Что будет делать поток №1?

Давайте представим, что это часть некоторого REST сервиса который обрабатывает запросы от пользователя. В какой-то момент пришел запрос от пользователя. На обработку запроса от пользователя был выделен некоторый поток. Назовём его поток №1. Что будет происходить с этим потоком во время выполнения данного метода?
async Task<int> CalcAsync() 
{
    var res = await CalcInternalAsync(); 
    return res + 1; 
}

Получается что метод CalcInternalAsync(); выполняется в другом потоке №2? Что будет делать поток №1?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
sarapinit
@sarapinit
Точу водой камень
Выделенный на задачу (Task), поток дойдет до CalcInternalAsync, далее он либо выполнится синхронно, если это возможно, либо вернется в пул потоков на время выполнения асинхронной работы.
Когда асинхронная работа закончится, из пула потоков снова возьмется поток (не обязательно тот же), в котором выполнится продолжение.

Тут надо думать учитывая пул потоков и стейт машину в которую преобразуется async\await. А про асинхронную работу стоит думать как про работу которую выполняет не процессор, а следовательно и поток для нее не нужен.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы