问题标签 [waithandle]
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.
c# - 使用 ThreadPool 跟踪失败工作人员的可靠方法
我正在寻找一种很好的方法来跟踪(计数)哪些工作人员在与线程池排队并使用 WaitHandle.WaitAll() 完成所有线程时失败。
互锁反击是一种好技术还是有更稳健的策略?
c# - 运行多个线程,在另一个完成时开始新的线程
我有一个有很多案例的应用程序。每个案例都有许多多页 tif 文件。我需要将 tf 文件转换为 pdf 文件。由于文件太多,我想我可以线程转换过程。我目前将该过程限制为一次十次转换(即十次踏板)。当一个转换完成时,另一个应该开始。
这是我正在使用的当前设置。
使用它,有时会导致异常,指出 WaitHandle.WaitAll() 或 WaitHandle.WaitAny() 数组参数的长度不得超过 65。我在这种方法中做错了什么,我该如何纠正它?
c# - 我需要在 ManualResetEvent 上调用 Close() 吗?
我一直在阅读 .NET Threading 并正在研究一些使用ManualResetEvent的代码。我在互联网上找到了很多代码示例。但是,在阅读WaitHandle的文档时,我看到了以下内容:
WaitHandle 实现了 Dispose 模式。请参阅实施 Finalize 和 Dispose 以清理非托管资源。
没有一个样本似乎在他们创建的 ManualResetEvent 对象上调用 .Close(),即使是pfxteam 博客中不错的递归和并发文章(编辑- 这有一个我错过的 using 块)。这只是示例监督,还是不需要?我很好奇,因为 WaitHandle “封装了操作系统特定的对象”,因此很容易发生资源泄漏。
multithreading - “C# 3.0 in a Nutshell”中关于线程的文本解释
在阅读Joseph 和 Ben Albahari的 C# 3.0 in a Nutshell时,我遇到了以下段落(第 673 页,标题为“使用等待和脉冲发出信号”的部分中的第一段)
“ Monitor类通过两个静态方法Wait和Pulse提供了另一种信号构造。原理是您自己使用自定义标志和字段(包含在lock语句中)编写信号逻辑,然后引入Wait和Pulse命令来缓解 CPU 旋转. 这种低级方法的优点是只需要Wait、Pulse和lock语句,就可以实现AutoResetEvent、ManualResetEvent和Semaphore以及WaitHandle的功能的静态方法WaitAll和WaitAny。此外,Wait和Pulse 在所有等待句柄都受到严格挑战的情况下也可以使用。”
我的问题是,最后一句话的正确解释是什么?
- 具有大量/大量等待句柄的情况,其中仅偶尔在任何特定等待句柄上调用 WaitOne()。
- 具有大量/大量等待句柄的情况,其中很少有多个线程倾向于阻塞任何特定的等待句柄。
- 一些其他的解释。
还希望能提供此类情况的说明性示例,以及如何和/或为什么通过等待和脉冲而不是其他方法更有效地处理它们。
谢谢!
编辑:我在这里找到了网上的文字
c# - 服务器多线程过度杀伤?
我目前正在创建一个服务器类型的应用程序,它将通常监听来自外部客户端的连接,并在它们连接时处理请求等。
目前,每次客户端连接时,我的实现都会创建一对线程。一个线程简单地从套接字读取请求并将它们添加到队列中,第二个线程从队列中读取请求并处理它们。
我基本上是在寻找关于你是否认为拥有所有这些线程是矫枉过正的意见,重要的是这种方法是否会给我带来问题。
需要注意的是,这些线程大部分时间都是空闲的——我在两个线程中都使用了等待句柄(ManualResetEvent)。Reader 线程一直等到消息可用,如果可用,则读取它并将其转储到 Process 线程的队列中。Process 线程一直等待,直到阅读器发出消息在队列中的信号(同样,使用等待句柄)。除非某个特定的客户端真的在敲击服务器,否则这些线程将一直处于等待状态。这很昂贵吗?
我做了一些测试 - 有 1,000 个客户端连接不断唠叨 - 服务器(所以,2,000 多个线程),它似乎处理得很好。
c# - C#:如何在 Compact Framework 中设置 AsyncWaitHandle?
我在我的TcpClient
一个 Compact Framework 2.0 应用程序中使用了一个。我想从 TCP 服务器接收一些信息。
由于 Compact Framework 不支持“大型”框架的超时机制,我正在尝试实现我自己的超时机制。基本上,我想做以下事情:
我想调用Set
,IAsyncResult.AsyncWaitHandle
但它没有这样的方法,我不知道将它转换为哪个实现。
如何设置等待句柄?还是通过调用自动设置EndRead
?文档表明我必须称Set
自己为...
谢谢你的帮助!
更新
似乎在调用时会自动设置等待句柄EndRead
- 但它不在文档中。有人可以证实这一点吗?
更新 2
写client.BeginRead
在我的示例代码中。当然,BeginRead
被称为NetworkStream
...
c# - 为什么我的 NamedPipeServerStream 不等待?
我正在使用 NamedPipeServerStream 在两个进程之间进行通信。这是我初始化和连接管道的代码:
但它似乎永远不会等待。我经常遇到以下异常:
System.InvalidOperationException:管道尚未连接。在 System.IO.Pipes.PipeStream.CheckWriteOperations() 在 System.IO.Pipes.PipeStream.WriteByte(字节值) 在 PeachesObjectVisualizer.Visualizer.Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
我认为等待返回后,一切都应该准备就绪。
如果我使用 pipeServer.WaitForConnection() 一切正常,但如果管道未连接,则挂起应用程序不是一种选择。
c# - WaitHandle.WaitAll 64 句柄限制的解决方法?
我的应用程序产生了大量不同的小型工作线程,我通过多个实例ThreadPool.QueueUserWorkItem
跟踪这些线程。ManualResetEvent
我使用该WaitHandle.WaitAll
方法阻止我的应用程序关闭,直到这些线程完成。
但是,我以前从未遇到过任何问题,因为我的应用程序正在承受更多负载,即创建更多线程,我现在开始遇到此异常:
WaitHandles must be less than or equal to 64 - missing documentation
什么是最好的替代解决方案?
代码片段
解决方法
c# - 如何正确处理等待句柄
我正在做一些多线程并使用 AutoResetEvents 和 ManualResetEvents 来控制我的主循环。当“破坏”线程时,我还必须处理这些信号,这很清楚。
但是我看到了如何处理 Waithandles 的不同方法,我不确定哪一种是正确的:
版本 1
版本 2
版本 3
c# - 我应该如何为 ajax 请求实现长轮询的 C# 服务器端部分?
我的架构涉及浏览器每 3 秒通过 ajax 轮询一次更新,我想将其更改为长轮询。
我希望有 1, 2.. {n} 个客户端长轮询,等待更新,并在服务器上发生一些事情以指示等待的客户端返回。我的第一个想法是使用EventWaitHandle
,如果我只想支持 1 个客户端,我可以轻松做到这一点。我只是有一个会阻止客户端,也许有超时,也许不是。无论哪种方式,an只允许我支持 1 个客户端(因为它只唤醒 1 个等待线程)并且我想要 n 个客户端。AutoResetEvent
WaitHandle
WaitOne
AutoResetEvent
我很确定我需要使用 a ,但我不确定何时调用它(唤醒线程时)。我应该只是在和之间的一些任意数量ManualResetEvent
WaitHandle
Reset
Set
Thread.Sleep
Set
Reset
吗?
在伪代码中,唤醒逻辑是
- 得到
ManualResetEventWaitHandle
- 称呼
Set
- 确保所有等待的客户端都已唤醒,同时防止新请求通过
- 现在打电话
Reset
,所有等待的客户都收到了他们的更新
这是我遇到困难的第 3 行。目前我正在折腾拥有一个LastTxID
让客户端/服务器维护并可能使用 2 个等待句柄的想法。然而,在我对这个实现发疯之前,我想在这里获得反馈,看看他们将如何实现唤醒逻辑。
编辑:假设我已经通过调整 IIS 或通过 WCF 或其他解决方案托管来解决与最大并发用户数相关的问题。我只想关注清醒的逻辑。