1 دقیقه میانگین مدت زمان مطالعه است

فرض کنید در یک تراکنش بانکی نیاز دارید که در صورت به خطا خوردن بخشی از کد، تمام موارد انجام شده هم به حالت قبل برگردند. بطور مثال اگر انتقال پول به خطا خورد موجودی کاربر اولیه دوباره افزایش یابد. در این موارد می‌توانید از 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