ひっそりと生きるプログラマのブログ

日頃気になった事なりを書き留めるブログです。関心ごとは多くもう少し更新頻度を上げたいところです。

TransactionScopeでタイムアウトするまでの既定値(時間)

TransactionScope クラス (System.Transactions)

TransactionScopeはコンストラクタタイムアウトする時間を指定することができます。
引数にタイムアウトする時間を指定しない場合は既定値が使用され、
設定ファイルを変更しない限り、その既定値は 1分 となります。


以下のコードで上記を確認する事が可能です。

Console.WriteLine(TransactionManager.DefaultTimeout);
Console.ReadLine();


設定ファイルへ以下を追加し
再度TransactionManager.DefaultTimeoutを確認します。(抜粋)

<configuration>
  <system.transactions>
    <defaultSettings timeout="00:04:12"/>
  </system.transactions>
</configuration>

設定が反映され 00:04:12 として表示されました。


以前に記事を書いた(TransactionScopeでタイムアウトするまでの最大許容時間 - ひっそりと生きるプログラマのブログ) と異なり、app.config / web.config での設定も可能です。


また、 DefaultTimeout は必ず 0 以上、MaximumTimeout以下で無ければなりません。

0 より小さい値を指定すると例外が発生します。
MaximumTimeout より大きい値を指定すると MaximumTimeout として扱われます。*1


私はよく、

using (var scope = new TransactionScope(TransactionScopeOption.Required))

と実装するので上記の設定は重宝します。*2



と、今日のところは(時間も遅いので)ここまで。

機会があれば、DefaultSettingsSection.DistributedTransactionManagerName プロパティ (System.Transactions.Configuration)についても何かしら記事をかくかもです。

*1:DefaultTimeoutを指定したにも関わらず、「タイムアウト時間が変わらない!!」という際は案外ここが原因だったりします。。。

*2:当該アプリケーションの設定をここの設定のみでまかなえるのは大きいと思います。