我的預期,我可以用這個模式:期待已久的任務不處理異常優雅
var task = Task.Run(() => Agent.GetUserType(Instance));
await task;
string information = task.GetExceptionOrStatus(); // extension method
當我的SQL Server未啓動 - 就像一個測試用例 - 我看到不同的是WCF服務拋出,我得到:
在Microsoft.Threading.Tasks.dll中發生類型'System.ServiceModel.FaultException'的異常,但未在用戶代碼中處理。
我的印象是我的代碼能夠從任務對象中提取錯誤。
我該如何做得更好?
當我在.net 4.5中禁用ThrowUnobservedTaskExceptions時,是否可以不使用try-catch? – Gerard
@Gerard:'ThrowUnobservedTaskExceptions'與此行爲無關。傳播例外是「異步」的設計方式;你有沒有想過的理由? –
只需訪問任務結果而不用嘗試捕獲就很容易。例如。你的'INotifyTaskCompletion'通過'ContinueWith'和一個'PropertyChanged'回調優雅地處理異常。也許我應該看看'task.Exception.Handle'。另一方面,try-catch是明確的,這也是很好的。 – Gerard