如果在阻塞集合类(.NET)中使用块,线程是否存活?

时间:2015-04-10 10:59:48

标签: c# .net multithreading

我正在winform应用程序中阻止收集队列 在MSDN中,如果没有元素,则说BlockingCollection.Take()方法调用块。 1)是否意味着线程将进入线程队列的等待状态?
2)如果是,线程可以等待多长时间? 3)当一个新元素被添加到集合时,如何自动发信号通知线程从等待状态进入就绪状态? 4)处于等待状态的线程的生命周期是什么(只要应用程序正在运行,它是否可用)?

1 个答案:

答案 0 :(得分:6)

  

1)是否意味着线程将进入线程队列的等待状态?

调用my_collection.Take()方法的线程将被阻止,直到某个项目可用

  

2)如果是,该线程可以等待多长时间?

Take方法无限期等待。请参阅source code。项目可用后,将返回该项目。但如果集合中没有任何内容,则没有超时,线程将只等待。要传递超时,您可以使用Take的重载。

  

3)线程如何自动发出信号从等待状态进入就绪状态   将新元素添加到集合时的状态?

使用超薄信号量,请参阅declaration of a semaphoreits use

  

4)该线程的寿命是多少?

这取决于你作为开发人员。您可以根据需要多次阻止和取消阻止线程。一旦你不需要一个线程,只需从它返回控制权。