WCF基于任务的操作异常处理和TPL

时间:2016-02-23 20:03:30

标签: c# wcf task-parallel-library

我有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());
                    }
            }
     }

1 个答案:

答案 0 :(得分:2)

也许你不应该捕获AggregateException而是一般的异常并将AggregateException处理移到Parrallel.ForEach循环之外。

MSDN: Handle Exceptions in Parallel Loops

如果您使用IIS来托管您的WCF服务,请记住除非更改,否则默认的20分钟空闲超时。后台任务不计入非空闲请求,您可能会发现IIS停止了您的WCF服务,因为在20分钟空闲超时之前没有进一步的请求。