我有一個方法:任務並行庫異常句柄「任務已取消」。
var taskCount = Task<List<Client>>.Factory.StartNew(() =>
{
return ClientRepository.GetListAll();
}).LogExceptions<Client>();
count = taskCount.Result;
我有擴展方法爲LogException爲:
public static Task<T> LogExceptions<T>(this Task<T> task) where T : new()
{
return task.ContinueWith<T>((antecedent) =>
{
bool isError = false;
var aggException = antecedent.Exception.Flatten();
foreach (var exception in aggException.InnerExceptions)
{
isError = true;
LogWrite.LogStep(" Task Exception - ", exception.Message);
}
if (isError)
{
return new T();
}
else
{
return antecedent.Result;
}
},
TaskContinuationOptions.OnlyOnFaulted);
}
上面的代碼工作,如果發生任何異常精細,它處理異常和預防工作進程從關閉它下降。
但是,當沒有錯誤時,它只是返回聚合異常作爲「任務被取消」。不知道我在上面的代碼中做錯了什麼。
如果上面的代碼是錯誤的,那麼以通用的方式處理任務中異常的最佳方法是什麼。
你能檢查聚合異常的內部異常嗎? – daryal