[英]WCF Task-Based Operations Exception Handling and TPL
我有一個使用基於任務的操作的WCF
代理。 我正在包裝在Parallel.ForEach()
的方法調用。 我正在調用的服務方法是緩慢/長時間運行的操作,偶爾會返回異常。 我無法在catch塊中捕獲這些異常-永遠不會碰到塊。 我能夠捕獲異常的唯一方法是使用同步服務方法。 如何使用異步服務方法捕獲異常? 在處理中返回異常是否太晚了?
Parallel.ForEach(campaignResults.SelectMany(cd => cd), result =>
{
try
{
retList.TryAdd(client.SubmitRequestAsync(result.id, requestDetail), item.id);
}
catch (AggregateException ex)
{
// NEVER HIT ON EXCEPTION
foreach (Exception e in ex.InnerExceptions)
{
Trace.TraceError(e.ToString());
}
}
}
也許您不應該捕獲一個AggregateException而是一個一般的異常,並將AggregateException處理移到Parrallel.ForEach循環之外。
如果使用IIS承載WCF服務,請記住,除非更改,否則默認存在20分鍾的空閑超時。 后台任務不算作非空閑請求,您可能會發現IIS停止了WCF服務,因為在20分鍾的空閑超時之前沒有進一步的請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.