Во что разворачивается await
От: Cynic Россия  
Дата: 20.03.15 08:39
Оценка: -2
Разбираясь с async/await я где-то на просторах интернета находил статью в которой чувак показывал во что разворачивается await, что-то там с ContinueWith. Теперь вот не могу найти. Как можно посмотреть во что разворачивается await?
:)
Re: Во что разворачивается await
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 20.03.15 09:06
Оценка: +2
Здравствуйте, Cynic, Вы писали:

C>Разбираясь с async/await я где-то на просторах интернета находил статью в которой чувак показывал во что разворачивается await, что-то там с ContinueWith. Теперь вот не могу найти. Как можно посмотреть во что разворачивается await?


Можно просто взять IlSpy или рефлектор и посмотреть)
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re: Во что разворачивается await
От: RushDevion Россия  
Дата: 20.03.15 09:08
Оценка:
Оно?
Re[2]: Во что разворачивается await
От: Cynic Россия  
Дата: 20.03.15 09:22
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Оно?


Ну типа того. Правда там русский чувак писал.
:)
Re: Во что разворачивается await
От: Sinix  
Дата: 20.03.15 09:27
Оценка: 13 (2) +1
Здравствуйте, Cynic, Вы писали:

C>Разбираясь с async/await я где-то на просторах интернета находил статью в которой чувак показывал во что разворачивается await, что-то там с ContinueWith. Теперь вот не могу найти. Как можно посмотреть во что разворачивается await?


Там нет ContinueWith().

http://rsdn.ru/forum/dotnet/5576308.1
Автор: Sinix
Дата: 25.04.14
(ссылки+ готовый awaiter для изучения. Смотрим выхлоп компилятора в Ilspy + пошагово проходим отладчиком).
http://rsdn.ru/forum/dotnet/4087161
Автор: Sinix
Дата: 21.12.10
(вся тема)
+
http://rsdn.ru/forum/dotnet/5809119.1
Автор: Sinix
Дата: 06.10.14
Re[2]: Во что разворачивается await
От: Pavel Dvorkin Россия  
Дата: 20.03.15 13:53
Оценка:
Здравствуйте, Sinix, Вы писали:

А что там под спудом, не в курсе ? Фиберы ? Или же какое-то распараллеливание средствами самого дотнета, без использования средств ядра ОС ?
With best regards
Pavel Dvorkin
Re[3]: Во что разворачивается await
От: Sinix  
Дата: 20.03.15 14:08
Оценка: 30 (2)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А что там под спудом, не в курсе ? Фиберы ? Или же какое-то распараллеливание средствами самого дотнета, без использования средств ядра ОС ?

Сам await можно навернуть поверх чего угодно, я в ответе давал пример с реализацией поверх Timer-а.

Таски тоже можно запустить поверх любого шедулера. По умолчанию используется ThreadPoolTaskScheduler, который скидывает задачи в стандартный пул потоков дотнета.
Вот тут
Автор: Sinix
Дата: 14.03.15
и дальше по теме я давал ссылки на оф. посты про производительность, внутренности и про переписывание ThreadPool и самих тасков.
Re[4]: Во что разворачивается await
От: Pavel Dvorkin Россия  
Дата: 20.03.15 15:46
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Сам await можно навернуть поверх чего угодно, я в ответе давал пример с реализацией поверх Timer-а.


М-да. Про таймер я что-то не подумал. Хотя сам устраивал распараллеливание на его основе в Windows 3.1, где потоками и не пахло.
With best regards
Pavel Dvorkin
Re[5]: Во что разворачивается await
От: Sinix  
Дата: 20.03.15 16:43
Оценка: 25 (4)
Здравствуйте, Pavel Dvorkin, Вы писали:

S>>Сам await можно навернуть поверх чего угодно, я в ответе давал пример с реализацией поверх Timer-а.

PD>М-да. Про таймер я что-то не подумал. Хотя сам устраивал распараллеливание на его основе в Windows 3.1, где потоками и не пахло.

Не, таймер это я для примера. Будет работать любой способ запустить метод на выполнение: от IOCP и до message pump, хоть и с разной эффективностью, конечно
Для оконной очереди сообщений, например, блокирующее ожидание приведёт к дедлоку по понятным причинам.

По умолчанию таски работают поверх ThreadPool дотнета, он, в свою очередь, переписан на набор lock-free очередей с балансировкой через work stealing. Детали —
http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx

и раздел Decentralized Scheduling Techniques тут:
https://msdn.microsoft.com/en-us/library/ff963549.aspx
Re[3]: Во что разворачивается await
От: Evgeny.Panasyuk Россия  
Дата: 20.03.15 17:03
Оценка: 32 (3) +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А что там под спудом, не в курсе ? Фиберы ? Или же какое-то распараллеливание средствами самого дотнета, без использования средств ядра ОС ?


Там происходит трансформация кода функции в объект-автомат: локальные переменные становятся полями объекта, плюс создаётся метод в начале которого по сути switch(last_state):
switch(last_state)
{
       // ...
       last_state = X;
       return; // await/yield
       case X:
       // ...
}
(нечто пободное, а-ля stackless coroutines, реализуется в Boost.Asio через макросы)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.