Разбираясь с async/await я где-то на просторах интернета находил статью в которой чувак показывал во что разворачивается await, что-то там с ContinueWith. Теперь вот не могу найти. Как можно посмотреть во что разворачивается await?
Здравствуйте, Cynic, Вы писали:
C>Разбираясь с async/await я где-то на просторах интернета находил статью в которой чувак показывал во что разворачивается await, что-то там с ContinueWith. Теперь вот не могу найти. Как можно посмотреть во что разворачивается await?
Можно просто взять IlSpy или рефлектор и посмотреть)
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Здравствуйте, Cynic, Вы писали:
C>Разбираясь с async/await я где-то на просторах интернета находил статью в которой чувак показывал во что разворачивается await, что-то там с ContinueWith. Теперь вот не могу найти. Как можно посмотреть во что разворачивается await?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А что там под спудом, не в курсе ? Фиберы ? Или же какое-то распараллеливание средствами самого дотнета, без использования средств ядра ОС ?
Сам await можно навернуть поверх чего угодно, я в ответе давал пример с реализацией поверх Timer-а.
Таски тоже можно запустить поверх любого шедулера. По умолчанию используется ThreadPoolTaskScheduler, который скидывает задачи в стандартный пул потоков дотнета. Вот тут
Здравствуйте, Pavel Dvorkin, Вы писали:
S>>Сам await можно навернуть поверх чего угодно, я в ответе давал пример с реализацией поверх Timer-а. PD>М-да. Про таймер я что-то не подумал. Хотя сам устраивал распараллеливание на его основе в Windows 3.1, где потоками и не пахло.
Не, таймер это я для примера. Будет работать любой способ запустить метод на выполнение: от IOCP и до message pump, хоть и с разной эффективностью, конечно
Для оконной очереди сообщений, например, блокирующее ожидание приведёт к дедлоку по понятным причинам.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А что там под спудом, не в курсе ? Фиберы ? Или же какое-то распараллеливание средствами самого дотнета, без использования средств ядра ОС ?
Там происходит трансформация кода функции в объект-автомат: локальные переменные становятся полями объекта, плюс создаётся метод в начале которого по сути switch(last_state):