我有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());
}
}
}
答案 0 :(得分:2)
也许你不应该捕获AggregateException而是一般的异常并将AggregateException处理移到Parrallel.ForEach循环之外。
MSDN: Handle Exceptions in Parallel Loops
如果您使用IIS来托管您的WCF服务,请记住除非更改,否则默认的20分钟空闲超时。后台任务不计入非空闲请求,您可能会发现IIS停止了您的WCF服务,因为在20分钟空闲超时之前没有进一步的请求。