Re[5]: Как далеко пробрасывать async\await
От: samius Япония http://sams-tricks.blogspot.com
Дата: 23.07.15 12:12
Оценка: +1
Здравствуйте, mr Pink, Вы писали:


S>>Верно. Но я бы не стал называть это "синхронно". Все-таки последовательно, цепочка ведь.

MP>Ну тут просто как противоположность "асинхронному", а если последовательно, то наоборот — параллельно.

MP>К вопросу "зачем":

MP>как я понял, await methodAsync() выполняется в том же потоке, отложенно,
Тут не все так просто. Начинается выполнение в том же потоке, но за разрывом выполнения дальше не факт, что в том же. Т.е. слева справа от await начинает работу тот же поток, потом внутри может быть разрыв выполнения, а слева от await можем получить другой поток. Но тоже не факт. Можем другой, а можем тот же. Зависит от обстоятельств.

MP>а Task.Run() дёргает ThreadPool для выделения нового потока...

Не обязательно нового. Просто другого. В этом случае выполнение пойдет "параллельно" с текущим потокм.

MP>Пока писал ответ понял, что не так формулирую. Мне нужно "дёрнуть" асинхронные вызовы (все три) без выделения новых потоков. И продолжить работу.

MP>Но! Мне важен результат выполнения.
Возможность этого зависит от того, как написаны те три метода. Если у них стоит просто return Task.FromResult(1); то можно быть уверенным что выполнение их закончится в том же потоке, что и началось. А если у них стоят разрывы выполнения, то может произойти переключение.
В общем, если вы запустите эти три метода в параллельном потоке и вызовете ожидание (Task.Run(...).Result), то результат вы получите в текущем потоке. Но для выполнения этих методов будет выделен как минимум один левый поток.
Отредактировано 23.07.2015 13:18 samius . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.