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

Pad*_*ula 2 .net c# multithreading

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

ole*_*sii 6

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

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

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

Take方法无限期等待.查看源代码.项目可用后,将返回该项目.但是如果集合中没有任何内容,则没有超时,线程将只等待.要传递超时,可以使用重载Take.

3)当一个新元素被添加到集合时,如何自动通知一个线程从等待状态进入就绪状态?

采用超薄旗语,看到信号灯的声明它的使用.

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

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

  • 提示:您可以通过单击行号并使用地址链接到特定行:http://referencesource.microsoft.com/#System/sys/system/collections/concurrent/BlockingCollection.cs,554 (2认同)