اجرا کردن بخشی از کد خارج از Transaction


فرض کنید در یک تراکنش بانکی نیاز دارید که در صورت به خطا خوردن بخشی از کد، تمام موارد انجام شده هم به حالت قبل برگردند. بطور مثال اگر انتقال پول به خطا خورد موجودی کاربر اولیه دوباره افزایش یابد. در این موارد می‌توانید از Transaction استفاده کنید.
حال فرض کنید در داخل این عملیات نیاز دارید تا بخشی را خارج از ترنزکشن انجام دهید تا حتی اگر کد به خطا خورد هم انجام شود. در این موارد کافی است یک Transaction جدید باز کنید و حالت آن را Suppress قرار دهید:

using (var scope = new TransactionScope(TransactionScopeOption.Required, option, TransactionScopeAsyncFlowOption.Enabled))
{

// Some code

 using (var tx = new TransactionScope(TransactionScopeOption.Suppress))
{
    InsertMoneyAction(ActionState.Active);
    tx.Complete();
}

// Some Code

scope.Complete();
}

مورد مهم در کد بالا تفاوت TransactionScopeOption و TransactionScopeAsyncFlowOption است. هر دو مقدار Suppress را دارند اما مورد مورد نیاز ما TransactionScopeOption.Suppress است که عمل انجام شده را انجام می‌دهد. در واقع دو کد زیر کاملا متفاوت هستند و یک کار را انجام نمی‌دهند:

using (var tx = new TransactionScope(TransactionScopeOption.Suppress))
{
    InsertMoneyAction(ActionState.Active);
    tx.Complete();
}
using (var tx = new TransactionScope(TransactionScopeAsyncFlowOption.Suppress))
{
    InsertMoneyAction(ActionState.Active);
    tx.Complete();
}

transactionscopeasyncflowoption

transactionscopeoption

لینک وبلاگ :

اجرا کردن بخشی از کد خارج از Transaction - روزمرگی های یک برنامه نویس (mhkarami97.ir)