我目前的TransactionScope超时的理解。
如果交易已经超过设定的超时时间跑步的时间延长,它抛出时transaction.complete()被调用的异常。 因此,如果事务中的处理已经持续X分钟,我们仍然将不得不等待X分钟之后,transaction.complete被调用。
在我们的例子中,我们使用的TransactionScope从Web服务中 - web请求的最终用户将不得不等待X分钟前的交易中止和异常冒泡了。
然而,对于一个HttpWebRequest的默认超时为100秒(根据MSDN)。 由于客户端超时100秒我们都在一分钟的TransactionScope超时。 这可确保数据库的一致性。
我超时的理解是否正确?
问:我们想尽量缩短最终用户的时间去了解交易的结果。 为了尽量减少等待时间,我们决定分手使用嵌套transactionscopes码 - 每一个超时说15秒。 如果一个孩子交易比15秒需要更长的时间,我们放弃了交易的全过程。
这里似乎子事务的超时被忽略。 我得到的父事务的超时被称为后,才例外。 在下面的代码ChildTransaction()总是返回true。 什么是推荐的方式,以尽量减少延迟? 该代码显示了1分钟,默认的超时只是使代码更干净
internal bool RootTransaction()
{
using (TransactionScope transaction = new TransactionScope())
{
try
{
bool result = ChildTransaction();
//The result is always true.
if (!result)
return result;
for (int counter = 0;counter <= 10;counter++)
{
//Either sleep OR do some processing
System.Threading.Thread.Sleep(5000);
//
//Dosomeprocess()
}
transaction.Complete();
return true;
}
catch (Exception e)
{
return false;
}
}
}
internal bool ChildTransaction()
{
using (TransactionScope transaction = new TransactionScope())
{
try
{
//Sleep for 70 seconds
System.Threading.Thread.Sleep(70000);
transaction.Complete();
}
catch (Exception e)
{
return false;
}
}
return true;
}