によるとMSDN :
編集:
回復用: TransactionInDoubtException
をキャッチする必要があります &適切なチェックで補正ロジックを記述します。
using (var scope =new TransactionScope(TransactionScopeOption.Required, option)) { try { Context.SaveEmail(_emailInfoList); context.SaveSyncState(syncState);スコープ.Complete(); true を返します。 } catch (TransactionInDoubtException ex) { //バッチのいずれかのレコードが部分的にコミットされているかどうかを確認します。コミットされた場合、このバッチを再処理する必要はありません。 // トランザクション スコープを最初に破棄する必要があります。 scope.Dispose(); if (IsReprocessingNeeded(syncState)) スロー; true を返します。 } } /// プライベート bool IsReprocessingNeeded(SyncStateDataModal syncState) { while (true) { try { var id =_emailInfoList[0].ID; bool isEmailsCommitted =Context.GetJournalEmail().FirstOrDefault(a => a.ID ==id) !=null; if (!isEmailsCommitted) は true を返します。 if (context.EmailSynch(syncState.Id) ==null) { context.SaveSyncState(syncState); false を返します。 } catch (Exception ex) { Thread.Sleep(TimeSpan.FromMinutes(AppConfiguration.RetryConnectionIntervalInMin)); } } }コード> プレ>
ソース TransactionInDoubtException の回復パスは?