zoukankan      html  css  js  c++  java
  • 异步使用委托delegate --- BeginInvoke和EndInvoke方法

    当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托。

    方法BeginInvoke有两个参数:

    • AsyncCallBack:回调函数,是一个委托,没有返回值,可以传一个参数,参数类型是object;
    • object AsyncState :回调函数的参数。

    BeginInvoke的返回值是IAsyncResult,

    方法EndInvoke需要的参数是BeginInvoke的返回值IAsyncResult.

    举例如下:

        class AsyncStateTest
        {
            private delegate void DelegateTest();
    
            public static void TestAsyncState()
            {
                DelegateTest delegateTest = new DelegateTest(delegateImpl);
                Console.WriteLine("Main method begin delegateTest");
                IAsyncResult asyncResult = delegateTest.BeginInvoke(new AsyncCallback(CallBack), "I am AsyncState(*_*)");
                //delegateTest.EndInvoke(asyncResult);
                Console.WriteLine("Main method end delegateTest");
                delegateTest.EndInvoke(asyncResult);
                Console.WriteLine("Main method continue");
            }
    
            private static void CallBack(IAsyncResult asyncResult)
            {
                object state = asyncResult.AsyncState;
                Console.WriteLine(state.ToString());
            }
    
            private static void delegateImpl()
            {
                Console.WriteLine("I am DelegateTest Impl");
            }
        }

    运行结果:

    Main method begin delegateTest
    Main method end delegateTest
    I am DelegateTest Impl
    Main method continue
    I am AsyncState(*_*)

    可以看到,主线程的输出先于委托方法的输出,证明该方法被异步执行了。另外EndInvoke方法的作用是阻塞线程(调用委托的主线程),使之等到委托的方法执行完毕(但是不会等到委托的回调函数执行完毕),上面的代码换一下EndInvoke方法的位置可以看到结果。

  • 相关阅读:
    绝对均匀图生成算法
    告别S! S! H! 秒杀终端工具——FastLogin快捷登录
    使用Atom打造无懈可击的Markdown编辑器
    程序异常分析指南
    javascript opacity兼容性随笔
    javascript event兼容性随笔
    javascript Xml兼容性随笔
    addEventListener、attachEvent、cancelBubble兼容性随笔
    算法--逆波兰表达式(数学逆波兰表达式和交并集逆波兰表达式)
    算法--区间数据计算
  • 原文地址:https://www.cnblogs.com/heisehenbai/p/10100278.html
Copyright © 2011-2022 走看看