Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果在阻塞集合类(.NET)中获取块,线程是否处于活动状态?_C#_.net_Multithreading - Fatal编程技术网

C# 如果在阻塞集合类(.NET)中获取块,线程是否处于活动状态?

C# 如果在阻塞集合类(.NET)中获取块,线程是否处于活动状态?,c#,.net,multithreading,C#,.net,Multithreading,我正在阻止winform应用程序中的收集队列。 在MSDN中,据说BlockingCollection.Take()方法调用在其中没有元素时会被阻塞。 1) 这是否意味着线程将进入线程队列的等待状态? 2) 如果是,线程可以等待多长时间? 3) 当向集合中添加新元素时,线程如何从等待状态自动进入就绪状态? 4) 处于等待状态的线程的生命周期是多少(意味着只要应用程序运行,它就可用) 1) 这是否意味着线程将进入线程队列的等待状态 调用my\u collection.Take()方法的线程将被阻止

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

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

调用
my\u collection.Take()
方法的线程将被阻止,直到项目可用

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

Take
方法无限期等待。看。一旦项目可用,它将返回该项目。但是,如果集合中没有任何内容,则没有超时,线程将只是等待。要通过超时,可以使用重载
Take

3) 线程如何从等待状态自动进入就绪状态 向集合中添加新元素时的状态

使用细长信号量,请参见和

4) 那根线的寿命是多少


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

1)是的,2)直到它可以从集合中获取元素3)可能使用普通事件对象,这意味着如果多个线程尝试从同一集合中获取,当元素出现时,只有一个线程会被唤醒,并且您可能无法控制它将是哪一个。4) 哪根线?如果您指的是调用
Take()
的线程,那么生命周期根本不受阻塞集合的控制(或者更确切地说,不应由阻塞集合控制),请尽量避免同时问多个问题。你可能会得到只回答其中几个问题的答案,但会回答不同的子问题,因此很难接受其中任何一个问题。@LasseV.Karlsen-但这些都是密切相关的,我认为这里没有问题。一个问题应该允许有(几个)部分。提示:您可以通过单击行号并使用地址链接到特定行:@LasseV.Karlsen awesome@Oleksii:谢谢你的回答。对于问题4,这意味着只要我的应用程序在运行,线程就会处于活动状态。如果我不需要线程,那么我需要返回一个控件。