Tag: threadstatic

AsyncLocal 在非异步/等待代码中的作用是什么?

我正在研究桌面winform应用程序的一个非常大的旧代码库。 在此代码库中,有许多操作在后台线程中执行,主要使用BackgroundWorker 。 此代码库中的一个常见模式是通过将工件绑定到正在执行的线程来隐藏复杂性。 例如,数据库连接和事务存储在[ThreadStatic]字段中。 我正在尝试更改此设置,并开始使用async/await代码,并从在池的任何线程中运行任务中受益,并允许任务通过使用ConfigureAwait(false)继续在任何其他线程中执行。 我知道[ThreadStatic]与async/await不兼容,我在这里读了几个答案,建议使用AsyncLocal 。 鉴于我正在开发大型代码库,如前所述,我无法一次性切换到async/await ,我必须逐步进行此更改。 因此之前[ThreadStatic]的代码将更改为AsyncLocal ,但代码的大部分将继续使用BackgroundWorker并且不会命中单个async/await代码行。 题 这会有用吗? 我需要能够定义某种上下文流程,它将与我的新async/await代码一起使用,并且还继续使用依赖于[ThreadStatic]旧的非异步代码,保持每个线程内容彼此独立。 如果我完全错了,走错了路,建议非常受欢迎。

ASP.NET中的ThreadStaticAttribute

我有一个组件需要在每个线程之前存储static值。 它是一个通用组件,可以在许多场景中使用,而不仅仅在ASP.NET中使用。 我正在考虑使用[ThreadStatic]属性来实现我的目标。 假设它在ASP.NET场景中也能正常工作,因为我假设每个Request都在自己的线程中调用。 经过一些研究后,我发现Scott Hanselman 撰写的这篇博客文章说在ASP.NET中使用[ThreadStatic]时要小心。 然而,大多数评论(在post下面)都不同意斯科特写的,说请求总是在一个线程中运行,并且该线程不会被另一个请求同时使用。 这也是我所相信的,但我很乐意在这里对你的专家有一些看法。