草庐IT

threadstatic

全部标签

c# - 确定性处理 ThreadStatic 对象

ThreadStaticattribute将静态变量声明为每个线程唯一。您知道正确处理此类变量的简单模式吗?我们在ThreadStatic之前使用的是一个ThreadContextManager。每个线程都分配了一个ThreadContext,它保留了所有线程特定的信息。我们生成了一些线程并让它们工作。然后,当它们全部完成时,我们释放了ThreadContentManager,如果它们是IDisposable,它又释放了所有上下文。我没有看到立即将此模式转换为ThreadStatic对象的方法。这些对象最终会被处理掉,因为线程死了,所以没有任何东西引用它们。但是,我们更喜欢确定性处置。

c# - .NET : ThreadStatic vs lock { }. 为什么 ThreadStaticAttribute 会降低性能?

我写了一个小测试程序并且很惊讶为什么lock{}解决方案执行速度比无锁快,但使用[ThreadStatic]静态变量上的属性。[ThreadStatic]片段:[ThreadStatic]privatestaticlongms_Acc;publicstaticvoidRunTest(){Stopwatchstopwatch=newStopwatch();stopwatch.Start();intone=1;for(inti=0;i锁定{}片段:privatestaticlongms_Acc;privatestaticobjectms_Lock=newobject();publicsta

c# - Thread.IsAlive 和 Thread.ThreadState==ThreadState.Running

我正在使用if(Thread.IsAlive)检查线程的状况。该线程中正在运行一个表单。有时在执行过程中,即使窗体保持打开状态,对Thread.IsAlive的调用似乎评估为false。我想用if(Thread.ThreadState==ThreadState.Running)执行相同的检查。这是正确的做法吗?如果不是,可能的解决方法是什么? 最佳答案 msdnThread.IsAlive属性如果此线程已启动且未正常终止或中止,则为true;否则为假。msdn线程.ThreadState运行线程已经启动,没有阻塞,也没有挂起的Thr

c# - AsyncLocal<T> 在非异步/等待代码中有什么作用?

我正在处理一个非常大且旧的桌面winform应用程序代码库。在此代码库中,有很多操作在后台线程中执行,主要使用BackgroundWorker。.此代码库中的一个常见模式是通过将工件绑定(bind)到正在执行的线程来隐藏复杂性。例如,数据库连接和事务存储在[ThreadStatic]中字段。我正在尝试改变这一点,并开始使用async/await代码,并受益于在池的任何线程中运行任务,并通过使用ConfigureAwait(false)允许任务在任何其他线程中继续执行.我知道[ThreadStatic]不适合async/await,我在这里阅读了几个建议使用AsyncLocal的答案相反

c# - ThreadStatic 与线程本地 <T> : is generic better than attribute?

[ThreadStatic]是使用属性定义的,而ThreadLocal使用通用。为什么选择不同的设计方案?在这种情况下使用泛型而不是属性有哪些优点和缺点? 最佳答案 评论中提到的博客文章没有明确说明,但我发现非常重要的是[ThreadStatic]不会为每个线程自动初始化东西。例如,假设您有这个:[ThreadStatic]privatestaticintFoo=42;使用它的第一个线程将看到Foo初始化为42.但后续线程不会。初始化程序仅适用于第一个线程。因此,您最终不得不编写代码来检查它是否已初始化。ThreadLocal通过让

c# - ThreadStatic 与线程本地 <T> : is generic better than attribute?

[ThreadStatic]是使用属性定义的,而ThreadLocal使用通用。为什么选择不同的设计方案?在这种情况下使用泛型而不是属性有哪些优点和缺点? 最佳答案 评论中提到的博客文章没有明确说明,但我发现非常重要的是[ThreadStatic]不会为每个线程自动初始化东西。例如,假设您有这个:[ThreadStatic]privatestaticintFoo=42;使用它的第一个线程将看到Foo初始化为42.但后续线程不会。初始化程序仅适用于第一个线程。因此,您最终不得不编写代码来检查它是否已初始化。ThreadLocal通过让

c# - ThreadStatic 属性如何工作?

[ThreadStatic]属性如何工作?我假设编译器会发出一些IL来填充/检索TLS中的值,但查看反汇编时它似乎并没有在那个级别执行它。作为后续,如果你把它放在一个非静态成员上会发生什么?我们让开发人员犯了这个错误,编译器甚至没有发出警告。更新此处回答的第二个问题:ThreadStaticModifiedwithStaticC# 最佳答案 Howdoes[ThreadStatic]attributework?你可以认为标有ThreadStatic的字段附加到一个线程,它的生命周期与线程的生命周期相当。因此在伪代码中,ThreadS

c# - ThreadStatic 属性如何工作?

[ThreadStatic]属性如何工作?我假设编译器会发出一些IL来填充/检索TLS中的值,但查看反汇编时它似乎并没有在那个级别执行它。作为后续,如果你把它放在一个非静态成员上会发生什么?我们让开发人员犯了这个错误,编译器甚至没有发出警告。更新此处回答的第二个问题:ThreadStaticModifiedwithStaticC# 最佳答案 Howdoes[ThreadStatic]attributework?你可以认为标有ThreadStatic的字段附加到一个线程,它的生命周期与线程的生命周期相当。因此在伪代码中,ThreadS

c# - C# 是否具有 "ThreadLocal"属性的 "ThreadStatic"模拟(对于数据成员)?

我最近发现“ThreadStatic”属性非常有用,但现在让我想要一个“ThreadLocal”类型的属性,它让我拥有基于每个线程的非静态数据成员。现在我知道这会产生一些重要的影响,但是:C#/.net中是否已经内置了这样的东西?或者因为目前看来答案是否定的(对于.net我可以自己想出一个合理的方法来实现它,但如果可用的话,我只会使用已经存在的东西。稻草人示例,如果它不存在,将实现我正在寻找的内容:classFoo{[ThreadStatic]staticDictionarythreadLocalValues=newDictionary();intdefaultValue=0;intT

c# - 在 async/await 中使用 ThreadStatic 变量

在C#中使用新的async/await关键字,现在对您使用ThreadStatic数据的方式(以及时间)产生了影响,因为回调委托(delegate)是在与async不同的线程上执行的操作开始于。例如,以下简单的控制台应用程序:[ThreadStatic]privatestaticstringSecret;staticvoidMain(string[]args){Start().Wait();Console.ReadKey();}privatestaticasyncTaskStart(){Secret="moomoo";Console.WriteLine("Startedonthread
12