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; } } }