线程问题-如果线程池中没有可用线程,该怎么办?

问题描述

| 我有以下代码:
CancellationTokenSource cancelSource = new CancellationTokenSource();
_cancelTokenList.Add(cancelSource);

CancellationToken token = cancelSource.Token;

Task.Factory.StartNew(() =>
{
   StartTest(token);
},token);
如果没有线程可用于为新任务提供服务,则将引发异常,还是仅在线程可用之前等待处理?如果等待,它将等待多长时间?     

解决方法

从MSDN:   您可以在系统内存允许的范围内排队尽可能多的线程池请求。如果请求多于线程池线程,则其他请求将一直排队,直到线程池线程可用为止。      托管线程池中的线程是后台线程。也就是说,它们的IsBackground属性为true。这意味着在所有前台线程退出后,ThreadPool线程将无法保持应用程序运行。 它将等到一个可用或您的应用程序退出。     ,它只会等到线程可用为止。据我所知,它会等待获取线程的时间。如果在线程仍在等待线程时取消它,它将立即被取消,并且用户代码将永远不会运行。     ,任务被交给调度程序。 (默认)TPL调度程序管理少数几个工作线程,并将任务分配给这些线程。如果没有线程可用,您的任务将在队列中等待。如果太多的任务正在排队,则调度程序/线程池将缓慢创建新线程(速率为2 /秒)。 您显示但未提及CancellationToken。它只能用于请求取消,因此即使在任务排队时取消了令牌,我也怀疑您的StartTest()将被执行。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...