Arr*_*abi 3 .net c# multithreading exception threadpool
使用多个线程下载时,我收到以下错误消息:
ThreadPool中没有足够的空闲线程来完成操作.
我应该尝试更改.net中线程池的默认设置,我该怎么办?
改变大小ThreadPool
几乎肯定是一个坏主意(尤其是:每个线程将占用另一块堆栈空间); 你应该看看你的线程用法 - 你是否在游泳池中饱和?您可能会发现TPL和Task[<T>]
处理某些异步代码的更好方法,或者在诸如IO之类的情况下 - Begin*
/ End*
async操作而不是ThreadPool
线程上的同步操作.
您还可以检查所有异步操作是否完全存在; 他们可能会拖延(也许是僵局)并且不会退出?
最后:将ThreadPool
被主要用于简单操作(其中的旋转加速成本Thread
是最明显); 长期运行的操作可能会在专用Thread
s上做得更好
尽管这并不能直接回答问题,但它可能会帮助某人避免此问题。您可以使用下面的命令查看有多少线程可用,并确保不超过它。
int workerThreads, cmpThreads;
ThreadPool.GetAvailableThreads(out workerThreads, out cmpThreads);
Run Code Online (Sandbox Code Playgroud)
这将为您提供最大可用线程数。
有关不同类型线程的描述,请查看以下解释:
归档时间: |
|
查看次数: |
9299 次 |
最近记录: |