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

На практике, разумеется, все эти советы периодически идут лесом и приходится таки изучать матчасть.
AK>суть вопроса: почему тело первого ContinueWith гарантированно отрабатывает ДО Task.Wait, в том время как второго, нет?
WhenAll() добавляет себя как ContinueWith к задачам-аргументам, поэтому WhenAll выполнится не раньше, чем запустятся предыдущие добавленные продолжения.
Добавите ожидание после последнего Wait(), тогда всё выведется.