问题标签 [threadpool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - .Net ThreadPool 线程的异常
重复: 如何从 ThreadPool.QueueUserWorkItem 中捕获异常?
我在 .Net ThreadPool 上为大量独立的远程调用排队多个委托,这些调用本身调用多个数据库和其他离线资源。通过在 ThreadPool 上排队这些调用,我可以同时运行它们并最小化整体延迟。
但是整个批处理需要事务处理,IE,只有在所有子线程都成功的情况下,才需要允许父线程的输出继续进行。我已经将子线程编码为在失败时引发自定义异常,但我发现这会导致父线程崩溃,因为这些异常不能在父线程中“捕获”......
我已经阅读了发生这种情况时 CLR 抛出的 UnHandledExceptionEvent 的信息,但是我需要在这些子线程排队和产生的方法中“处理”这个异常,以根据孩子的成功控制立即的下游处理threeads... 我该怎么做呢?
c# - 在 C# 中等待线程池
重复
我有 X 个函数等待分配给线程池,线程池的最大线程数为 5。我需要找到一种解决方案,让主线程等待所有 X 个函数执行完毕。
代码如下所示:
我希望主线程等到所有函数都执行完毕。
一个简单的解决方案是创建 Rulecnt no of ManualResetEvents 并将它们传递给线程,并等待所有信号到达。
但是由于任何时候运行的最大线程数是 5,我们可以只使用 5 个 ManualResetEvents 吗?,如果可能的话怎么办?
或者如果有任何解决方案请解释一下?
multithreading - ThreadPool、QueueUserWorkItem 和关机时的死锁
我刚刚实现了一个如此处所述的线程池
非常简单的实现,工作正常,但我的应用程序不再关闭。似乎有两个工作线程(和另一个线程,我猜是排队线程)卡在函数中
我记得在 QueueUserWorkItem(线程池实现中使用的 WinAPI 函数)的帮助条目中读过一些关于 IO 完成的内容,但我无法正确理解。我将 WT_EXECUTELONGFUNCTION 用于我的工作线程,因为执行可能需要一段时间,我希望创建一个新的工作线程而不是等待现有的工作线程完成。分配给工作线程的一些任务执行一些 I/O 工作。我尝试使用 WT_EXECUTEINIOTHREAD 但它似乎没有帮助。
我应该提到,主线程等待进入关键部分,调用堆栈为
有什么想法我在这里做错了吗?提前感谢您的帮助。
c# - 这是对 ThreadPool 的适当使用吗?我可以确定它会为每个任务启动一个线程吗?
这些任务中的每一个都在 Windows 服务的生命周期内运行。对于这种事情,我一直坚持使用 ThreadPool,我应该只是启动普通线程吗?我可以确定 ThreadPool 将有足够的线程来运行每个任务吗?如果我将 MaxThreads 设置为 7,我以后会因为这些线程永不中止而遇到问题吗?将其设置为更高的值是否安全?
编辑:
我总是希望所有 7 个线程同时运行,并且它们永远不会中止——我什至应该使用线程吗?还有其他更适合这种永久运行的任务吗?
每个任务每 x 分钟运行一次特定的方法。
c# - 带有 lambda 表达式和匿名方法的 ThreadPool.QueueUserWorkItem
将两个参数传递给线程池上的新线程有时会很复杂,但似乎使用 lambda 表达式和匿名方法,我可以做到这一点:
现在,我当然简化了这个例子,但以下几点很关键:
- 传递的字符串对象是不可变的,因此是线程安全的
- s1 和 s2 变量在 try 块的范围内声明,我在将工作排队到线程池后立即退出,因此 s1 和 s2 变量在此之后永远不会修改。
这有什么问题吗?
另一种方法是创建一个新类,该类实现具有 3 个成员的不可变类型:test、s1 和 s2。在这一点上,这似乎是额外的工作,没有任何好处。
.net - .Net CF 在应用程序的生命周期内运行线程
我正在用 C# 开发一个 .Net Compact 框架应用程序,它利用设备上安装的一些第三方消息队列软件。
我对这个环境相当陌生,想知道我是否可以通过一些更明智的眼睛运行架构的一些关键概念,看看我是否走在正确的轨道上或如何改进它。
在我的应用程序运行时,我需要保持消息队列库在后台运行,以便它可以发出通知并通知我的应用程序任何传入消息并处理我的应用程序生成的消息。它需要在我的应用程序的整个生命周期中运行,所以我认为最好的方法是在我的应用程序启动时在自己的线程中运行它?
我不想用代码淹没这篇文章,所以我把我认为重要的部分放在了上面,如果我需要澄清更多,请告诉我。
当应用程序像这样启动时,我在单独的线程中启动消息进程,
MessageProcessor 是消息传递库的一个外观,用于简化交互并保留它的单个实例。我在下面发布了其中的一部分,它会引发未送达事件并在收到消息时通知。
首先调用 Start 方法并建立会话;然后我们将开始接收通知并能够发送消息。
收到消息后,我目前正在通过 ThreadPool 在单独的线程中管理事件处理,以便继续并响应其他通知和消息。
这看起来是一种合理的方法吗?它能否确保我的消息队列库能够独立于我的应用程序进行处理?
任何建议将不胜感激,感谢您的时间。
java - Java ThreadFactory 的问题
在我的应用程序中,我使用带有自定义 ThreadFactory 的线程池。
我的代码如下所示:
但是,在将各种 Runnables 提交到线程池之后,如果我转储当前线程(来自 IDE,Intellij IDEA),我会得到:
(以及线程 2-9 的类似堆栈跟踪)
所以基本上不是得到线程编号 1,2,3,4,5,6,7,8,9,10 我得到线程编号 1,1,2,3,4,5,6,7,8,9
一切似乎都运行良好,但显然令人不安。
c# - 为什么 Visual Studio 会从 ThreadPool 工作项中跳过我的异常?
我知道this other post,但它似乎不适用于我的情况。
首先,这是我的环境:
Windows XP 64-bit SP3;带有 SP 的 Visual Studio 2008;.NET 3.5 SP1;WPF 应用程序。
我的问题是我似乎无法走到异常发生的地方。它只是继续运行而不是继续调试会话。
这是一些代码——我没有写所有的代码,所以请不要对命名发表评论:)
然后在那个SetTcpChannel
方法中:
最后,在异常实际发生的地方(内部EnsureTcpSocket
):
这是我一直在做的事情:
EnsureTcpSocket
我在里面的行 设置了一个断点SetTcpChannel
,- F11(步入)
EnsureTcpSocket
所以我可以看到_tcp
这段代码 - 尝试 F10 (step-over)
TcpClient
构造函数
在最后一步,应用程序从调试器中恢复并继续运行,我从未看到任何异常。
有任何想法吗?
vb.net - 使用 ThreadPool.QueueUserWorkitem 生成线程时签名不兼容
错误是:
方法“Private Sub ProcessToolWork()”没有与委托“Delegate Sub WaitCallback(state As Object)”兼容的签名。
这是怎么回事?我从未经历过以这种方式产生线程的错误。
这是我的常规定义:
看出什么不对了吗?
我也尝试过为这个项目制作一个新的 WaitCallback ,如下所示: