在namespace PetShop.OrderProcessor.Program 的代码中:
如果在配置文件里设置batchSize=1,那么tsTimeout =transactionTimeout
所以在24行。if ((elapsedTime + queueTimeout + transactionTimeout) < tsTimeout.TotalSeconds) ,这个永远为False.除非queueTimeout为负数
1
// the transaction timeout should be long enough to handle all of orders in the batch
2
TimeSpan tsTimeout = TimeSpan.FromSeconds(Convert.ToDouble(transactionTimeout * batchSize));
3![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
Order order = new Order();
5
while (true) {
6![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
// queue timeout variables
8
TimeSpan datetimeStarting = new TimeSpan(DateTime.Now.Ticks);
9
double elapsedTime = 0;
10![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
int processedItems = 0;
12![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
ArrayList queueOrders = new ArrayList();
14![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
//OrderInfo orderData = orderQueue.Receive(timeout);
16
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, tsTimeout)) {
17
// Console.WriteLine("begin.at:" + DateTime.Now.ToString());
18
// Receive the orders from the queue
19
for (int j = 0; j < batchSize; j++) {
20
// Console.WriteLine("从消息队列中取数据.at:" + DateTime.Now.ToString());
21![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
try {
23
//only receive more queued orders if there is enough time
24
if ((elapsedTime + queueTimeout + transactionTimeout) < tsTimeout.TotalSeconds) {
25
//Console.WriteLine(string.Format("从消息队列中取数据.at:{0},{1},{2},{3},{4}", DateTime.Now.ToString(), elapsedTime, queueTimeout, transactionTimeout, tsTimeout.TotalSeconds));
26
queueOrders.Add(order.ReceiveFromQueue(queueTimeout));
27
28
}
29
else {
30
j = batchSize; // exit loop
31
}
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
//update elapsed time
34
elapsedTime = new TimeSpan(DateTime.Now.Ticks).TotalSeconds - datetimeStarting.TotalSeconds;
35
}
36
catch (TimeoutException) {
37![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
//exit loop because no more messages are waiting
39
j = batchSize;
40
//Console.WriteLine("TimeoutException.at:" + DateTime.Now.ToString());
41
}
42
}
43
// Console.WriteLine("从消息队列中取数据Over.at:" + DateTime.Now.ToString());
44![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
//process the queued orders
46
for (int k = 0; k < queueOrders.Count; k++) {
47
order.Insert((OrderInfo)queueOrders[k]);
48
processedItems++;
49
totalOrdersProcessed++;
50![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
}
52
// Console.WriteLine("上传数据.at:" + DateTime.Now.ToString());
53![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
//batch complete or MSMQ receive timed out
55
ts.Complete();
56
// Console.WriteLine("Over.at:" + DateTime.Now.ToString());
57
}
58![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
Console.WriteLine("(Thread Id " + Thread.CurrentThread.ManagedThreadId + ") batch finished, " + processedItems + " items, in " + elapsedTime.ToString() + " seconds.at:"+DateTime.Now.ToString());
60
}
问题在于第2行:TimeSpan tsTimeout = TimeSpan.FromSeconds(Convert.ToDouble(transactionTimeout * batchSize));![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
如果在配置文件里设置batchSize=1,那么tsTimeout =transactionTimeout
所以在24行。if ((elapsedTime + queueTimeout + transactionTimeout) < tsTimeout.TotalSeconds) ,这个永远为False.除非queueTimeout为负数