public void Opera(TradeOrder tradeOrder) { lock (tradeOrder) { //Console.WriteLine("Doing " + tradeOrder.Id); switch (tradeOrder.Status) { case Status.WaittingTrade: Interlocked.Increment(ref _totalStart); Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Start " + tradeOrder.Id + " ThreadId: " + Thread.CurrentThread.ManagedThreadId); tradeOrder.Start(); break; case Status.Pending: Interlocked.Increment(ref _totalCheck); ; Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Check " + tradeOrder.Id + " ThreadId: " + Thread.CurrentThread.ManagedThreadId); tradeOrder.Check(); break; case Status.Completed: break; default: break; } } }
public async void Post(TradeOrder tradeOrder) { //异步方法 //await Task.Run(() => // { // Received(this, tradeOrder); // }); lock (tradeOrder) { Semlock.Current.WaitOne(); if (tradeOrder.Status == Status.Pending) { Received(this, tradeOrder); } else { //开辟新线程 Thread thd = new Thread(() => { Thread.Sleep(50); Received(this, tradeOrder); Semlock.Current.Release(); }); thd.Start(); } } }