簡體   English   中英

WCF基於任務的操作異常處理和TPL

[英]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循環之外。

MSDN:處理並行循環中的異常

如果使用IIS承載WCF服務,請記住,除非更改,否則默認存在20分鍾的空閑超時。 后台任務不算作非空閑請求,您可能會發現IIS停止了WCF服務,因為在20分鍾的空閑超時之前沒有進一步的請求。

暫無
暫無

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

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