在docs.microsoft.com 上說:
請注意,盡管沖突非常罕見,但不能保證任務識別符號是唯一的。
這是否意味著堆中可以同時存在具有相同 ID 的任務?或者這是否意味著它不可能,但是有些任務的 ID 已經不存在了?
uj5u.com熱心網友回復:
這意味著如果您創建 4,294,967,295 個任務,并讀取Id每個任務的屬性,則第一個和最后一個任務的值都為 1 Id。
您可以在此處查看該Task.Id屬性的源代碼。下面是這段代碼的精髓:
public class Task
{
private volatile int m_taskId;
public int Id
{
get
{
if (m_taskId == 0)
{
int newId = NewId();
Interlocked.CompareExchange(ref m_taskId, newId, 0);
}
return m_taskId;
}
}
internal static int s_taskIdCounter;
internal static int NewId()
{
int newId = 0;
do
{
newId = Interlocked.Increment(ref s_taskIdCounter);
}
while (newId == 0);
return newId;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444724.html
下一篇:使用共享記憶體的執行緒
