从ConcurrentQueue获取GUID

时间:2013-11-13 21:44:18

标签: c#-4.0

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

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

1 个答案:

答案 0 :(得分: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");