Почему пример RunAsync для нового кода Service Fabric имеет такую структуру
protected override async Task RunAsync(CancellationToken cancellationToken)
{
while(true)
{
cancellationToken.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
вместо этого
protected override async Task RunAsync(CancellationToken cancellationToken)
{
while(cancellationToken.IsCancellationRequested)
{
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
Не предпочтительнее ли вариант без броска? В документах указано, что обе реализации верны: «Система будет ждать завершения вашей задачи (путем успешного завершения, отмены или ошибки)».
CancellationToken
заключается в том, чтобы выдатьOperationCanceledException
если отмена была отменена и вернуть если отмена была слишком поздно . Возможно, у них просто есть этот код для согласованности, или возможно, что Service Fabric изменит способ самовосстановления в зависимости от того, как завершаетсяRunAsync
. - person Stephen Cleary   schedule 30.05.2016