簡體   English   中英

如何使用async / await設置TaskContinuationOptions?

[英]How to set TaskContinuationOptions using async/await?

我可以使用async / await等所有選項,如OnlyOnRanToCompletion,OnlyOnCanceled,NotOnFaulted等嗎? 我找不到關於如何使用Tasks獲得相同結果的示例,例如:

Task.Factory.StartNew(foo).ContinueWith(bar, TaskContinuationOptions.NotOnRanToCompletion);

我不確定簡單的條件或異常處理是否可以管理顯式任務中可用的所有延續行為。

我可以使用async / await等所有選項,如OnlyOnRanToCompletion,OnlyOnCanceled,NotOnFaulted等嗎?

你不需要。

而不是使用位標志和lambda continuation的豐富語法, await支持非常自然的try / catch語法:

try
{
  await foo();
}
catch
{
  bar();
  throw;
}

我不確定簡單的條件或異常處理是否可以管理顯式任務中可用的所有延續行為。

它們自然地處理NoneNotOnCanceledNotOnFaultedNotOnRanToCompletionOnlyOnCanceledOnlyOnFaultedOnlyOnRanToCompletion 大多數其他標志僅對並行任務有意義,而不是異步任務。 例如, AttachedToParentHideSchedulerPreferFairnessasync世界中沒有意義; 始終async世界中指定DenyChildAttachLazyCancellationExecuteSynchronously ; LongRunning 永遠不應該。

我不這么認為。

Async / await並沒有一起取代TPL,而是通過簡化操作來更好地補充它。
如果您仍需要額外配置,則必須堅持使用任務,或者您可以嘗試使用此行為實現自定義等待。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM