示例#1
0
 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;
         }
     }
 }
示例#2
0
        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();

                }
            }

        }