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