Они похожи, но не совсем одинаковы.Например, в прецессии SynchronizationContext.Current
продолжение метода async
будет запланировано на этот контекст синхронизации, но ContinueWith
не будет и будет выполняться в потоке пула потоков.Хотя, используя другую перегрузку ContinueWith
, вы можете заставить ее делать то же самое:
.ContinueWith(t => DoSomething(), TaskScheduler.FromCurrentSynchronizationContext());
И вы можете запретить планирование контекста синхронизации в асинхронной версии с await yourTask.ConfigureAwait(false)
.
Тогда исключениеобработка отличается.В версии async
исключение будет выдано напрямую, а если было несколько исключений (например, из await Task.WhenAll
) - будет выдано только первое, а остальные будут проглочены.Трудно пропустить это исключение.
В версии ContinueWith
выброшенное исключение представлено t.Exception
, и это всегда AggregateException
, поэтому вам нужно развернуть его.С другой стороны - все исключения есть (если их несколько) и ни одно не проглочено.Однако довольно легко забыть обработать это исключение.Например, в коде в вашем вопросе - вы не обрабатываете исключение в ContinueWith
, поэтому продолжение DoSomething()
будет выполнено в любом случае, независимо от того, было это исключение или нет.В версии async
продолжение не выполняется в случае исключения.
Обе реализации являются «действительными».Вы не должны забывать обрабатывать исключения в обоих случаях.С ContinueWith
- либо всегда проверяйте t.Exception
, либо запланируйте отдельное продолжение с OnlyOnFaulted
(и проверяйте только там).В случае версии async
- завернуть корпус в блок try-catch
.По характеру возникновения пожара и забывания - вы не можете обрабатывать исключения на месте вызова, но вам не следует полностью отказываться от них.
В вашем конкретном случае с выполнением метода после небольшой задержки я бы сказал, что это просто вопроспредпочтения (за исключением различий в захвате контекста синхронизации).Я лично предпочитаю ContinueWith
, это выражает намерение более ясно, и вам не нужен отдельный метод с неясной семантикой.