在C#中,我想知道是否有可能等待直到一个BlockingCollection被后台线程清除,如果等待时间过长则设置超时。目前我所使用的临时代码让我感觉有些不够优雅(因为使用Thread.Sleep好像并不是一个好习惯):
while (_blockingCollection.Count > 0 || !_blockingCollection.IsAddingCompleted)
{
Thread.Sleep(TimeSpan.FromMilliseconds(20));
// [extra code to break if it takes too long]
}
_blockingCollection.Count != 0 || !blockingCollection.IsAddingCompleted
(注意使用||而不是&&)。 - Matthew Watson