/// <summary> /// 处理订单事宜 /// </summary> private static void ProcessOrders() { //计算当前线程当前批次处理的事务超时总时间 TimeSpan tsTimeout = TimeSpan.FromSeconds(Convert.ToDouble(transactionTimeout * batchSize)); QueueOrder order = new QueueOrder(); while (true) { ///开始事务的时间间隔节点 TimeSpan datatimeStarting = new TimeSpan(DateTime.Now.Ticks); //单次获取订单所得时间 double elapsedTime = 0; //订单处理计数 int processedItems = 0; //当前批次处理订单集合 ArrayList queueOrders = new ArrayList(); //首先验证事务 using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, tsTimeout)) { //从队列中检索订单 for (int i = 0; i < batchSize; i++) { try { //在一定时间 类接收队列的订单 if ((elapsedTime + queueTimeout + transactionTimeout) < tsTimeout.TotalSeconds) { queueOrders.Add(order.Receive(queueTimeout)); } else { i = batchSize; // 结束循环 } elapsedTime = new TimeSpan(DateTime.Now.Ticks).TotalSeconds - datatimeStarting.TotalSeconds; } catch (TimeoutException) { //没有可以等待的消息也结束循环 i = batchSize; } } //处理队列的订单 for (int k = 0; k < queueOrders.Count; k++) { //根据业务逻辑处理 //处理代码 processedItems++; totalOrdersProcessed++; } //处理完毕或者是超时 ts.Complete(); } Console.WriteLine("(Thread Id " + Thread.CurrentThread.ManagedThreadId + ") batch finished, " + processedItems + " items, in " + elapsedTime.ToString() + " seconds."); } }