TransactionScope
でタイムアウトしてしまうときの対処法
大量のデータを処理する場合、デフォルトの処理時間内にSQLが処理しきれない場合がある
トランザクションのタイムアウト時間は、初期設定では1分
// タイムアウト時間 1分
using (var transaction = new TransactionScope())
{
}
タイムアウト時間を設定するには、TransactionScopeOption
のオプション設定が利用可
例えば、下記のようにタイムアウト時間を設定できる
// タイムアウト時間 10分
using (var transaction = new TransactionScope(
TransactionScopeOption.Required,
new System.TimeSpan(0, 10, 0)))
{
}
タイムアウト時間を無制限にすることも可
// タイムアウト時間 無制限
using (var transaction = new TransactionScope(
TransactionScopeOption.Required, TimeSpan.Zero))
{
}
タイムアウト時間を初期値の最大値である10分を超える設定をする場合、
machine.config
に以下を記述する必要
<configuration>
<system.transactions>
<machineSettings maxTimeout="01:00:00" />
</system.transactions>
</configuration>
machine.config
の場所は、例えば64bitのWindowsなら下記の場所にある
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
Reference