Префикс await по сути своей создает отдельный поток (№13 в нашем случае), который ставиться в пул CLR и ожидает когда основной поток ( №10) передаст ему управление:
а когда асинхронный поток ( в данном случае №1) получил данные и основному потоку они понадобились, то в этом случае этому отдельному потоку и передается управление
итак - а как же это устроено внутри ? Давайте посмотрим во что разворачивает функция HttpLenghtAsync:
как мы видим создается "машина состояний" (state machine) - приближенное подобие класса для данной машины мы видим как структуру HttpLengthSM. Все параметры передаются как локальные переменные (синим цветом)
а когда асинхронный поток ( в данном случае №1) получил данные и основному потоку они понадобились, то в этом случае этому отдельному потоку и передается управление
подробнее в видео
итак - а как же это устроено внутри ? Давайте посмотрим во что разворачивает функция HttpLenghtAsync:
как мы видим создается "машина состояний" (state machine) - приближенное подобие класса для данной машины мы видим как структуру HttpLengthSM. Все параметры передаются как локальные переменные (синим цветом)
Комментариев нет :
Отправить комментарий