zoukankan      html  css  js  c++  java
  • 用一个示例方法来初始理解ManualResetEvent的用法。

     [Test]
            public void ResetEventTest()
            {
                var allDone = new ManualResetEvent(false);
                var i = 0;
                Console.WriteLine("开始循环。");
                ThreadPool.QueueUserWorkItem((x) =>
                {
                    while (i < 5)
                    {
                        i++;
                        Thread.Sleep(1000);
                        Console.WriteLine("循环【{0}】休眠结束", i);
                    }
                    allDone.Set(); //结束循环,可以从WaitOne处开始后续执行了
                });
               
                Console.WriteLine("开始等待");
                allDone.WaitOne();
                Console.WriteLine("收到了Set的通知,可以后续进行了.");
    
            }

    上面的就不多解释了,自已动手看看执行结果,比说有用得多。


    有时我们要在同步返回的方法中等待异步(或踪事件)的返回结果,那么除了循环等待外,还可以这样实现:

    public virtual ActionResultWrap Request<T>(string cmdName,T param )
                {
                    allDone.Reset(); //重置,以下方法等待返回中
                    //var hasReturn = false;
                    var wrap = new ActionResultWrap();  
                    ReceiveWrap = (x) =>
                    {
                        wrap =   x;
                        //hasReturn = true;
                        allDone.Set();
                    };
                    var swrap = new DatagramWrap();
                    Send(swrap.ToBson(cmdName, param));
                    allDone.WaitOne();
                    ////这个就是循环等待的方法了
                    //while (!hasReturn)
                    //{
                    //    Thread.Sleep(20);
                    //}
                   
                    return wrap;
                }
  • 相关阅读:
    R
    P
    O
    M
    二分算法的一些思考
    I
    H
    G
    5-46 新浪微博热门话题 (30分)——unfinished HASH
    BZOJ 1179: [Apio2009]Atm
  • 原文地址:https://www.cnblogs.com/atwind/p/2975746.html
Copyright © 2011-2022 走看看