Tag:

C#是否可以中断ThreadPool中的特定线程?

假设我在ThreadPool排队了一个工作项,但是如果没有要处理的数据,则工作项会阻塞(从BlockingQueue读取)。 如果队列为空并且没有更多的工作进入队列,那么如果我想中断阻塞任务,我必须调用Thread.Interrupt方法,但是如何使用ThreadPool做同样的事情? 代码可能如下所示: void Run() { try { while(true) { blockingQueue.Dequeue(); doSomething(); } } finally { countDownLatch.Signal(); } } 我知道在这种情况下最好的办法是使用常规的Thread ,但我想知道是否有一个ThreadPool等效方法来中断工作项。

强制ThreadPool更快地启动线程

我使用ThreadPool.QueueUserWorkItem在Windows CE上创建一个线程(我使用.NET Framework 3.5)。 有时线程会等待某些事情并且开始得太晚。 在QueueUserWorkItem文档中,它表示代理将在“线程池线程可用时”执行。 有没有办法强制ThreadPool立即执行我的委托? Thread.Start()会成为一个解决方案吗? 谢谢!

IIS的单个Web请求是否保留在单个线程上?

我想编写一个日志记录http模块,它在请求执行时为线程本地存储中的单个请求存储日志事件列表。 在End_Request上,我想将所有事件写回持久存储。 问题是,一个请求是否与一个线程匹配? 即我可以在我的代码中的任何地方假设我可以向IEnumerable添加项目,并且它们将在请求结束时正确地组合在一起。

用于multithreadingWindows服务的线程库

我正在寻找一个好的库,最好是在C#中,我可以在Windows服务中使用它,它将处理所需的所有multithreadingfunction。 该服务将每隔x分钟运行一次,检查数据库是否有要调用的进程,并为每个进程生成一个线程并运行它。 每个线程都应该处理exception,日志记录等。 有什么建议?

.NET中的线程池和.IsBackground

MSDN以及许多其他来源声称线程池中的工作线程始终是后台。 “线程池线程是后台线程。” (MSDN) “汇集的线程总是后台线程。” (在C#中穿线,Joseph Albahari) 我可以通过设置轻松地使工作线程非背景 Thread.CurrentThread.IsBackground = false; 应用程序将等待线程完成。 这有什么问题?

限制线程池线程的数量

我在我的应用程序中使用ThreadPool 。 我首先使用以下命令设置线程池的限制: ThreadPool.SetMaxThreads(m_iThreadPoolLimit,m_iThreadPoolLimit); m_Events = new ManualResetEvent(false); 然后我使用以下内容排队 WaitCallback objWcb = new WaitCallback(abc); ThreadPool.QueueUserWorkItem(objWcb, m_objThreadData); 这里abc是我调用的函数的名称。 在此之后,我正在执行以下操作,以便我的所有线程都达到1点,主线程接管并继续进行 m_Events.WaitOne(); 我的线程限制是3.我遇到的问题是,尽管线程池限制设置为3,我的应用程序同时处理3个以上的文件,而它一次只能处理3个文件。 请帮我解决这个问题。

进程优先级和线程池优先级之间的任何关系(C#)

我知道线程池优先级应该/不能被正在运行的进程更改,但是在线程池上运行的特定任务的优先级是否与调用进程优先级有些相关? 换句话说,无论调用进程优先级如何,线程池中的所有任务都以相同的优先级运行? 谢谢 更新1:我应该更具体,我引用Parallel.ForEach中的线程

像Node.js / V8一样的.NET线程?

我已经离开了.NET桌面编程一段时间了,同时喝了Node.js koolaid。 Node.js的某些部分我觉得很容易使用。 特别是,我喜欢线程模型的简单性,并且我可以获得multithreading应用程序的一些好处,同时只编写代码来跟踪单个线程。 现在,我需要在.NET中编写一个multithreading应用程序,我想到我没有理由不使用用于构建Node.js应用程序的类似线程模型 。 特别是,我想: 使用回调参数调用长时间运行的函数。 (该函数将在池中的线​​程上执行。也许在新线程上调用函数的简单包装函数就足够了吗?) 让那些回调函数调用在“主”线程上运行以进行处理 保持此“主”线程访问的所有对象的自动同步,因此锁定不是问题 这个线程模型的这种框架是否已存在于.NET应用程序中? 如果没有,是否有部分.NET已经支持或处理我正在寻求的一些function?

异步套接字读取:不能退出启动线程 – 该怎么办?

我有一个我异步读取的NetworkStream(使用async / await) await Task.Factory.FromAsync((cb, state) => stream.BeginRead(buffer, offset, readLen – offset), stream.EndRead, null); 不幸的是,有时会发生ioexception:“由于线程退出或应用程序请求,I / O操作已中止。” 我相信我达到了Socke.EndReceive中记录的要求: http : //msdn.microsoft.com/en-us/library/w7wtt64b.aspx 。 哪个州: 当该线程退出时,由给定线程启动的所有I / O都将被取消。 如果线程在操作完成之前退出,则挂起的异步操作可能会失败。 由于异步方法在默认调度程序上运行,因此无法保证此要求。 有没有解决的办法? 我是否需要启动专用线程来启动I / O? 最好的问候,德克

MsgWaitForMultipleObjects的C#等价物是什么?

我在报告模式下有一个带有ListView的Windows窗体。 对于视图中的每个项目,我需要执行一个长时间运行的操作,其结果是一个数字。 我在本机win32中这样做的方法是为每个项创建一个工作线程(天真地;当然我不会创建无限数量的线程),然后在线程句柄数组上创建MsgWaitForMultipleObjects()。 当每个计算完成时,线程信号和主UI线程唤醒并更新。 同时,我们抽取消息,以便UI线程保持响应。 任何人都可以提供一个如何在C#中工作的例子吗? 我看过Monitor对象,它似乎不是我想要的 – 或者是否在阻塞时抽取消息? 谢谢。 编辑:似乎WaitHandler.WaitAny()可能实际上是在发送消息。 请参阅cbrumme关于 CLR中消息抽取的论文 。