下面看个例子:
1
class Program
2
在运行的时候会发现,在三秒后屏幕上打印4,然后再停留三秒后打印16,这就表明,dl.Invoke(2)一但被调用,就会阻塞后面的调用,直到dl.Invoke(2)的返回值返回,然后dl.Invoke(4)才被调用。2
有时候我们的业务要求最好不去等待,怎么解决呢?
还好,委托提供了异步调用方法的功能,改告一下上面的代码如下:
1
class Program
2
现在,代码的运行几乎是同时的,当4被打印到屏幕上时,16也会被很快打印出来!没中中间的sleep(3000)了。2
还有一种方法是,不用关心定义的委托的名字是什么,同样能实现返回参数,如下所地:
1
class Program
2
注意以下代码:2
((DL)(((AsyncResult) asyncresult1).AsyncDelegate)).EndInvoke(asyncresult1)),关没有提及被定义的dl,还有一点就是dl.BeginInvoke(2, null, null)的两个null参数,好,下一篇再介绍!
在上面的例子中,异步的实现就如一个带参数的多线程的实现!可作类同的处理。