Гарантирует ли .net вызов Transaction.Current.TransactionCompleted?

1

Я смотрю TransactionScope и подписаться на Transaction.Current.TransactionCompleted. Чтобы предотвратить проблемы с параллельными транзакциями, я использую Monitor. Могу ли я быть уверенным, что Transaction.Current.TransactionCompleted будет вызываться в любом случае?

Monitor.Enter(TransactionScopeLockString);

TransactionOptions transactionOptions = new TransactionOptions();

TransactionScope result = new TransactionScope(scopeOption, transactionOptions);

Transaction.Current.TransactionCompleted += (sender, transactionEventArgs) =>
{
    if (transactionEventArgs.Transaction.TransactionInformation.Status
                == TransactionStatus.Aborted)
    {
        // clear stuff
    }

    Monitor.Exit(TransactionScopeLockString);
};
Теги:
c#-4.0

1 ответ

1
Лучший ответ

Это гарантировано, хотя может быть одна проблема с вашим кодом. Я помню, что событие TransactionCompleted вызывается в другом потоке, поэтому Monitor.Exit не работает. Вы не можете войти в монитор на одном потоке и выйти из него на другом.

Я считаю, что вы можете использовать ManualResetEvent вместо: Monitor.Enter и Monitor.Exit в разных потоках

Ещё вопросы

Сообщество Overcoder
Наверх
Меню