在.NET 1.1中异步调用WEB SERVICE时出现这个的异常咋办?由于需要经常执行WEB调用,我已经将线程池中的最大线程数设成了100,还是报异常,郁闷~~~,如果像这样
while (true)
{
....
      ThreadPool.GetAvailableThreads(out wt,out ct); 
  if( wt < 5)
  { 
   Thread.Sleep(1000); 
   continue; 
  }
....
}
等半天都空不出来呀~~~有没有啥子办法可以从根本上解决问题的?????

解决方案 »

  1.   

    Thread.Sleep(1000); 
    你设置时间长一点试试.
      

  2.   

    一般 线程池中的最大线程数 是CPU数*25,你设的再大也没用。可以考虑使用window的信号量来标示线程数
      

  3.   

    如果的确是由于调用的频率过高,导致一般线程池的数目无法承受,那么可以考虑不用线程池的线程(就是不用内置的异步调用方法),而是手工创建一个子线程,并在新的线程中使用 webservice的同步调用,这样的线程是不受线程池影响的,不过在创建的时候会更耗 一些资源
      

  4.   

    >>> 我已经将线程池中的最大线程数设成了100
    你如何做到的?这个得改CLR Host的配置,否则默认最大值是CPU数 * 25
      

  5.   

    如果一般高频率调用,的确会有一些性能上的影响和问题。 对于异步调用,.net 在客户端的确是使用线程池中的线程来处理的。 不知你是如何设置调整线程池线程数目的
      

  6.   

    to redbb: 设置线程池中最大线程数是直接调用mscoree.dll中的API CorBindToCurrentRuntime和CorSetMaxThreads进行设置的,相关的资料上可以找到你说的"手工创建一个子线程,并在新的线程中使用 webservice的同步调用,这样的线程是不受线程池影响的" 可否用段代码演示一下?
      

  7.   

    cool, 用到了CorBindToCurrentRuntime那么既然你已经调整了这个最大值,还出这种错误的话,不妨再设大一点...
    另外一个方面,怎么会需要这么多线程?异步调用完成后,线程就会结束,然后返回线程池手工创建线程的意思是,自己new Thread(new ThreadStart(xxx)),然后Thread.Start启动线程,这也相当于异步。这个线程不受线程池限制(但是如果数量太大,会严重影响系统性能,线程本身也要开销)
      

  8.   

    是异步调用完成后返回线程池,可就是没空闲呀~,郁闷得很~
    因为是调用远程WEB服务,WEB服务的调用是在框架内部实现的异步调用方式,没法直接手工创建线程啊~