在我的C#应用程序中,我必须执行3个任务,并且我将所有内容放在事务范围内,并且我将事务时间设置为30分钟。
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew,
new TimeSpan(0, 30, 0)))
{
//1. Create an entry in database table
//2. call some external perl script which push data
to some table
//3. update the table (step 1) with number of records generated (step 2)
scope.Complete();
}
通常第2步需要10分钟时间执行,第3步需要5分钟时间(第1步是真正的快速)。
我还设置了步骤3的命令超时,
sqlCom.CommandTimeout = 1800;
交易的所有3个任务都在最大15-20完成,但我仍然收到超时错误,
System.Transactions.TransactionAbortedException: The transaction has
aborted. ---> System.TimeoutException: Transaction Timeout
--- End of inner exception stack trace ---
at
System.Transactions.TransactionStateAborted.BeginCommit(InternalTransaction
tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object asyncState)
at System.Transactions.CommittableTransaction.Commit()
at System.Transactions.TransactionScope.InternalDispose()
at System.Transactions.TransactionScope.Dispose()
注意 - 当步骤2和3花费更少的时间(平均2-3分钟)时,我没有收到任何超时错误。
请建议我是否可以设置其他内容?