Re[3]: Объясните поведение ContinueWith(..., TaskContinuationOptions.ExecuteSync
От: Sinix  
Дата: 02.01.17 19:57
Оценка: 7 (2) +1
Здравствуйте, AK107, Вы писали:

AK>я не прошу исправить мой пример, чтобы он "заработал". я прошу объяснить мне поведение ContinueWith, а именно отличие первого от второго.


Ох, если совсем коротко, то вот. Если чуть подробней, то лучше не заморачиваться с ContinueWith и реализовать нужное поведение через await. Ну, или хотя бы не терять дочернюю таску, возвращаемую .ContinueWith. В идеале — не увлекаться TaskCreationOptions и не пытаться организовать последовательное выполнение через таймауты или примитивы синхронизации. Ну, в теории На практике, разумеется, все эти советы периодически идут лесом и приходится таки изучать матчасть.

AK>суть вопроса: почему тело первого ContinueWith гарантированно отрабатывает ДО Task.Wait, в том время как второго, нет?

WhenAll() добавляет себя как ContinueWith к задачам-аргументам, поэтому WhenAll выполнится не раньше, чем запустятся предыдущие добавленные продолжения.

Добавите ожидание после последнего Wait(), тогда всё выведется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.