监视队列<actions>的线程

时间:2017-08-19 13:20:25

标签: c# multithreading snmp

我正在做一个小项目,使用SNMP映射网络(仅限路由器)。为了加快速度,除了第一个由主线程完成的工作之外,我试图让一个线程负责执行我需要的工作。

此时我有两个工作,一个是另一个参数:

  • <a href="/posts/4/{{mylink}}">This is a persian link</a>
  • UpdateDeviceInfo(NetworkDevice nd) *尚未定义

我想要实现的是让那些工作线程等待工作 出现在UpdateLinks()上并等待它为空。主线程将添加第一个作业,然后在开始添加第二个作业并唤醒睡眠线程之前等待可能添加更多作业的所有工作人员完成。

我的问题是:

  • 如何定义Queue<Action>以便我可以插入方法和参数(如果有的话)。如果不可能,我可以使所有函数接受相同的参数。

  • 如何无限启动工作线程。我不知道应该在哪里创建Queue<Actions>

到目前为止,这是我的代码:

for(;;)

1 个答案:

答案 0 :(得分:0)

您最好的选择似乎是使用BlockingCollection而不是Queue类。它们在FIFO方面的行为实际上相同,但是BlockingCollection会让每个线程都阻塞,直到可以通过调用GetConsumingEnumerable或Take来获取项目。这是一个完整的例子。

http://mikehadlow.blogspot.com/2012/11/using-blockingcollection-to-communicate.html?m=1

至于包含参数,似乎你可以使用closure来封装NetworkDevice本身然后只是将Action排队而不是Action&lt;&gt;