1

我正在尝试从队列中获取 GUID 的值,但我没有得到正确的值。我能知道我哪里错了吗?

var gid=Guid.NewGuid();
Guid  value ;
var queue1 = new ConcurrentQueue<Guid>();
queue1.Enqueue(gid);
while(queue1.TryDequeue(out value));
4

1 回答 1

0

ConcurrentQueue<T>.TryDequeue始终写入Guid,因为它是一个out参数。

第二次通过 while 循环,它清除了值。

发生的事情是,第一次点击 while 语句时,出队操作成功。然后它再次尝试出队,但失败(因为只有一个元素),并将输出 ( value) 设置为default(Guid)

如果您执行以下操作,您将看到两个值相同:

var gid=Guid.NewGuid();
Guid value ;
var queue1 = new ConcurrentQueue<Guid>();
queue1.Enqueue(gid);
if(queue1.TryDequeue(out value))
{
    Console.WriteLine("gid==value: {0}", gid == value);
}
else
    Console.WriteLine("Failed to dequeue");
于 2013-11-13T21:53:42.047 回答