gpt4 book ai didi

c# - 访问线程本地存储

转载 作者:行者123 更新时间:2023-11-30 22:39:16 25 4
gpt4 key购买 nike

当第二个线程执行时,它导致异常。你能解释一下为什么吗?

class TLS
{
public void Run()
{
lock (this)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " started.");
LocalDataStoreSlot ldss = Thread.AllocateNamedDataSlot("unique"); // Exception
Thread.SetData(ldss, "some_data");
string a = Thread.GetData(ldss) as string;
Thread.Sleep(1000);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " ended.");
}
}
}

异常详情:

at System.Collections.Hashtable.Insert(对象键,对象 nvalue, bool 加法)
在 System.LocalDataStoreMgr.AllocateNamedDataSlot(字符串名称)
在 AutoLock.cs 中的 ConsoleApplication2.TLS.Run():第 65 行
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态)
在 System.Threading.ThreadHelper.ThreadStart()

谢谢。

最佳答案

您正在尝试分配同名插槽两次。您可能想阅读 MSDN documentation .

更新:您应该只分配一次插槽 - 在启动线程之前。在你的主程序中做。现在你每次线程启动时都会这样做,这就是你得到异常的原因。

关于c# - 访问线程本地存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5829581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com