我创建了一个运行多个线程的服务。我不需要单独与每个线程进行通信,而是一次与所有线程进行通信。我找到了这篇文章,它允许通过处理程序进行通信。我使用 WCF 作为我的服务端点,想知道我是否可以与它而不是处理程序进行通信。以下是我在服务中所做的一些示例代码:
public class ThreadCoordinator
{
private int _numberOfThreads = 10;
private List<Thread> _threads;
public ThreadCoordinator()
{
_threads = new List<Thread>();
}
private void StartThreads()
{
for (int t = 0; t < _numberOfThreads; t++)
{
var st = new TheThread();
var thread = new Thread(new ThreadStart(st.Run));
_threads.Add(thread);
thread.Start();
}
}
public void RunThreads()
{
try
{
StartThreads();
}
finally
{
WaitForAllThreads();
CloseAllConnections();
}
}
private void WaitForAllThreads()
{
foreach (Thread t in _threads)
{
t.Join();
}
}
private void CloseAllConnections()
{
//do some stuff to clean up resources
}
}
internal class TheThread
{
public void Run()
{
//Do The work and update a global variable
foreach(var person in somePersonList)
{
//do some work on that person
_someGlobalIntegerMember ++;
}
}
}
我想要一个全局变量来跟踪所有线程正在处理多少数据。因此,随着每个线程不断更新的东西正在处理数据。更重要的是,我希望能够从客户端的命令中暂停所有线程。如果我执行 ajax 请求或从 MVC 提交表单并不重要。本文说明了如何暂停一个线程,但我不确定它是否可以应用于多个线程。