我正在winform应用程序中阻止收集队列
在MSDN中,如果没有元素,则说BlockingCollection.Take()方法调用块。
1)是否意味着线程将进入线程队列的等待状态?
2)如果是,线程可以等待多长时间?
3)当一个新元素被添加到集合时,如何自动发信号通知线程从等待状态进入就绪状态?
4)处于等待状态的线程的生命周期是什么(只要应用程序正在运行,它是否可用)?
答案 0 :(得分:6)
1)是否意味着线程将进入线程队列的等待状态?
调用my_collection.Take()
方法的线程将被阻止,直到某个项目可用
2)如果是,该线程可以等待多长时间?
Take
方法无限期等待。请参阅source code。项目可用后,将返回该项目。但如果集合中没有任何内容,则没有超时,线程将只等待。要传递超时,您可以使用Take
的重载。
3)线程如何自动发出信号从等待状态进入就绪状态 将新元素添加到集合时的状态?
使用超薄信号量,请参阅declaration of a semaphore和its use。
4)该线程的寿命是多少?
这取决于你作为开发人员。您可以根据需要多次阻止和取消阻止线程。一旦你不需要一个线程,只需从它返回控制权。