[英]Specific exception caught incorrectly in Parallel.ForEach loop C#
看起來在我創建的 Parallel.ForEach 循環中錯誤地捕獲了特定異常。
這是 Parallel.ForEach 循環。
Parallel.ForEach(allRelatedEntities.Entities, relEntity =>
{
Log("Processing UpsertRequest for referencing entity " + relEntity.LogicalName);
UpsertRequest request = new UpsertRequest()
{
Target = relEntity
};
try
{
TryUpsert(relEntity, request);
}
catch (CommunicationException ex)
{
Log("CommunicationException? " + ex.ToString());
try
{
Log("Retrying upsert - start (sleep 10), TID = " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(10);
TryUpsert(relEntity, request);
}
catch (CommunicationException ex2)
{
Log("Retrying upsert - failed (CommunicationException), TID = " + Thread.CurrentThread.ManagedThreadId);
Log("Exception on upserting " + relEntity.LogicalName + " record having id " + relEntity.Id + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("Exception Message : " + ex2.ToString() + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("Exception TraceText : " + ((FaultException<OrganizationServiceFault>)ex).Detail.TraceText + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("-----------------------------------------\r\n");
}
catch (Exception e)
{
Log("Retrying upsert - success (other exception), TID = " + Thread.CurrentThread.ManagedThreadId);
Log("Exception on upserting " + relEntity.LogicalName + " record having id " + relEntity.Id + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("Exception Message : " + ex.ToString() + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("Exception TraceText : " + ((FaultException<OrganizationServiceFault>)ex).Detail.TraceText + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("-----------------------------------------\r\n");
}
}
catch(Exception e)
{
Log("Exception on upserting " + relEntity.LogicalName + " record having id " + relEntity.Id + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("Exception Message : " + e.ToString() + ", TID = " + Thread.CurrentThread.ManagedThreadId);
if(e is FaultException<OrganizationServiceFault>)
Log("Exception TraceText : " + ((FaultException<OrganizationServiceFault>)e).Detail.TraceText + ", TID = " + Thread.CurrentThread.ManagedThreadId);
Log("-----------------------------------------\r\n");
}
});
這是日志語句的樣子
從日志語句中可以看出,System.Service.FaultException 正在落入特定的CommunicationException
catch 塊。 我無法對此做出正面或反面。
誰能看到我在這里做錯了什么? 如何捕獲正確的異常並排除錯誤的異常?
那是因為FaultException是一個子類CommunicationException ,所以當您捕獲所有CommunicationException
,根據定義,您也捕獲了FaultException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.