我正在尝试从队列中获取 GUID 的值,但我没有得到正确的值。我能知道我哪里错了吗?
var gid=Guid.NewGuid();
Guid value ;
var queue1 = new ConcurrentQueue<Guid>();
queue1.Enqueue(gid);
while(queue1.TryDequeue(out value));
我正在尝试从队列中获取 GUID 的值,但我没有得到正确的值。我能知道我哪里错了吗?
var gid=Guid.NewGuid();
Guid value ;
var queue1 = new ConcurrentQueue<Guid>();
queue1.Enqueue(gid);
while(queue1.TryDequeue(out value));
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");