[英]Async-Await, exception handling and continuation using TaskContinuationOptions.OnlyOnFaulted
[英]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;
}
我不確定簡單的條件或異常處理是否可以管理顯式任務中可用的所有延續行為。
它們自然地處理None
, NotOnCanceled
, NotOnFaulted
, NotOnRanToCompletion
, OnlyOnCanceled
, OnlyOnFaulted
和OnlyOnRanToCompletion
。 大多數其他標志僅對並行任務有意義,而不是異步任務。 例如, AttachedToParent
, HideScheduler
和PreferFairness
在async
世界中沒有意義; 應始終在async
世界中指定DenyChildAttach
, LazyCancellation
和ExecuteSynchronously
; 和LongRunning
永遠不應該。
我不這么認為。
Async / await並沒有一起取代TPL,而是通過簡化操作來更好地補充它。
如果您仍需要額外配置,則必須堅持使用任務,或者您可以嘗試使用此行為實現自定義等待。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.