在我的简单生产者/消费者多线程项目中,我正在使用自定义队列集合。我像这样定义了TryDequeue
......
public bool TryDequeue(out F data)
{
data = default(F);
bool success = false;
lock (_queueLock)
{
if (_queue.Count > 0)
{
data = _queue.Dequeue();
success = true;
count--;
}
}
return success;
}
当我试着这个......
private static void Consumer()
{
while (true)
{
Thread.Sleep(100);
string item = null;
lock (sharedQueue)
{
while (sharedQueue.Count == 0)
Monitor.Wait(sharedQueue);
item = sharedQueue.TryDequeue();
}
Console.WriteLine("Consuming item: {0}", item);
}
}
这是第二个线程,我收到此错误:
Error 1 No overload for method 'TryDequeue' takes 0 arguments
任何人都可以帮助我吗?感谢。
答案 0 :(得分:2)
while (true)
{
Thread.Sleep(100);
string item = null;
lock (sharedQueue)
{
while (sharedQueue.Count == 0)
Monitor.Wait(sharedQueue);
if(sharedQueue.TryDequeue(out item)) //succes!
...
else //something went wrong
...
}
Console.WriteLine("Consuming item: {0}", item);
}
您的方法返回bool
,您需要将项目与out
关键字放在括号之间。现在你没有传递预期的out F data
参数。
答案 1 :(得分:1)
item = sharedQueue.TryDequeue();
是罪魁祸首。 TryDequeue()
需要参数。
sharedQueue.TryDequeue(out item);
会有效吗?这似乎是你需要做的。