• 关于AutoResetEvent的使用


    AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。

    线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程
    通过调用 Set 发出资源可用的信号。

    调用 SetAutoResetEvent 发信号以释放等待线程。AutoResetEvent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止
    状态。如果没有任何线程在等待,则状态将无限期地保持为终止状态。

    可以通过将一个布尔值传递给构造函数来控制 AutoResetEvent 的初始状态,如果初始状态为终止状态,则为 true;否则为 false

    通俗的来讲只有等myResetEven.Set()成功运行后,myResetEven.WaitOne()才能够获得运行机会;Set是发信号,WaitOne是等待信号,只有发了信号,
    等待的才会执行。如果不发的话,WaitOne后面的程序就永远不会执行。

    定义委托线程:   

    public delegate void AsyncDelegate();

     try
            {
                AsyncDelegate dlgt1 = new AsyncDelegate(GetPolicyInfo);
                IAsyncResult ar1 = dlgt1.BeginInvoke(null, null);
                AsyncDelegate dlgt2 = new AsyncDelegate(GetFDPriceInfo);
                IAsyncResult ar2 = dlgt2.BeginInvoke(null, null);
                AsyncDelegate dlgt3 = new AsyncDelegate(LiuKouQuery);
                IAsyncResult ar3 = dlgt3.BeginInvoke(null, null);
                AsyncDelegate dlgt4 = new AsyncDelegate(PolicyCoordinationQuery);
                IAsyncResult ar4 = dlgt4.BeginInvoke(null, null);
                ar1.AsyncWaitHandle.WaitOne();
                dlgt1.EndInvoke(ar1);
                ar2.AsyncWaitHandle.WaitOne();
                dlgt2.EndInvoke(ar2);
                ar3.AsyncWaitHandle.WaitOne();
                dlgt3.EndInvoke(ar3);
                ar4.AsyncWaitHandle.WaitOne();
                dlgt4.EndInvoke(ar4);
                CombinePolicyAndPrice();
            }
            catch
            {

            }
            finally
            {
                AutoResetEvent are = (AutoResetEvent)o;
                are.Set();
            }

  • 相关阅读:
    SWT的TreeViewer和TableViewer的交互
    利用SVNKit进行版本库的树的导出
    使用SVNkit删除版本库的文件
    SVN中正确的add操作和delete操作
    SVNKIT一段代码的分析
    Eclipse中的SVN的冲突解决方案详解
    CSS3实现小于1px的边框(移动端)
    向左滑动删除一区域内容(移动端)
    下拉框文本框+复选(选中的显示在文本框中)
    弹性盒布局(自适应)
  • 原文地址:https://www.cnblogs.com/xingvskong11/p/AutoResetEvent.html
Copyright © 2020-2023  润新知