实际上,我想出了以下实现方式。
这里显而易见的问题是:如果某个代码两次调用
编辑:
bool DoesNamedDataSlotsExist(string name)
{
try
{
Thread.AllocateNamedDataSlot(name);
}
catch
{
return true;
}
return false;
}
这里显而易见的问题是:如果某个代码两次调用
DoesNamedDataSlotExist()
,它将会先生成false
,然后再生成true
(如果使用Thread.FreeNamedDataSlot()
则可以进行优化……)。但有更好的方法吗?编辑:
GetNamedDataSlot
的来源。public LocalDataStoreSlot GetNamedDataSlot(string name)
{
LocalDataStoreSlot slot2;
bool tookLock = false;
RuntimeHelpers.PrepareConstrainedRegions();
try
{
Monitor.ReliableEnter(this, ref tookLock);
LocalDataStoreSlot slot = (LocalDataStoreSlot) this.m_KeyToSlotMap[name];
if (slot == null)
{
return this.AllocateNamedDataSlot(name);
}
slot2 = slot;
}
finally
{
if (tookLock)
{
Monitor.Exit(this);
}
}
return slot2;
}
我需要访问this.m_KeyToSlotMap
…