• 您的位置我爱Aspx >> VB.Net >> VB.NET中使用代表对方法异步调用
  • VB.NET中使用代表对方法异步调用

  • 作者:aspxer  来源:internet  日期:2007-5-20 14:01:06  关键字:.net
  • 让我们先看看BeginInvoke

    你的使用方法可能如下所示:

    Dim ar as System. IAsyncResult

    ar = delegate.BeginInvoke("class90",Nothing, Nothing)

    你可能会发现,这种调用方法有些不同。首先是多出两个输入参数,其次是返回值是System. IAsyncResult。这到底是怎么一回事呢?

    当你调用BeginInvoke的时候,一系列的事情在后台自动发生了。

    当你用代表发出调用请求后,CLR(公共语言运行环境,Common Language Runtime)接到这个请求,并将这个请求放置到一个内部的处理队列(Queue)中去。一旦放置完成后,CLR马上就给调用者返回一个IAsyncResult的对象。这个对象很重要,我们一会儿还要解释他的具体作用。

    当调用者收到返回的IAsyncResult对象后,它就可以进行下一步的工作。由于将请求放置到队列中是个非常快速的操作,所以调用者马上就可以去完成下一个动作,没有被“阻挡(Block)”。

    CLR在后台维持着一个“线程池(Thread Pool)”。这些线程守候着前面提到的那个处理队列。一旦有任务被放置到队列中,一个线程就会拿到这个任务并执行它。也就是说原来要调用者线程执行的费时的操作被线程池中的一个线程代劳了。(这里你可以看出,不管是用什么样的语言,在异步调用中,一定有其它的线程出现。或者是你手工创建它(如Java),或者是系统为你创建(如.NET)。那么这个“线程池”中究竟有几个线程呢?这个问题你可以不用关心。CLR会根据程序的特点以及当前的硬件条件自行决定。比如对于运行在单处理器平台上的一般的桌面程序,这个线程池可能有几个线程;而对于一个运行在4处理器服务器上的后台应用,线程池可能会有近百个线程。这样做的好处就是降低程序员的开发难度,让.NET的CLR去解决这些和用户应用逻辑无关的问题。)

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:在VB.NET中改变显示器的分辩率
    下一篇:.NET平台下Web树形结构程序设计