ThreadStatic v.s. ThreadLocallt;Tgt;: is generic better than attribute?(ThreadStatic 与 ThreadStatic 对比ThreadLocallt;Tgt;:泛型比属性好吗?)
问题描述
[ThreadStatic]
使用属性定义,而 ThreadLocal<T>
使用泛型.为什么选择不同的设计解决方案?在这种情况下使用泛型优于属性有什么优缺点?
[ThreadStatic]
is defined using attribute while ThreadLocal<T>
uses generic.
Why different design solutions were chosen?
What are the advantages and disadvantages of using generic over attributes in this case?
推荐答案
评论中提到的博客文章没有明确说明,但我发现非常重要的是,[ThreadStatic]
不会自动为每个线程初始化事物.例如,假设你有这个:
Something the blog post noted in the comments doesn't make explicit, but I find to be very important, is that [ThreadStatic]
doesn't automatically initialize things for every thread. For example, say you have this:
[ThreadStatic]
private static int Foo = 42;
使用它的第一个线程将看到 Foo
初始化为 42
.但后续线程不会.初始化程序仅适用于第一个线程.所以你最终不得不编写代码来检查它是否已初始化.
The first thread that uses this will see Foo
initialized to 42
. But subsequent threads will not. The initializer works for the first thread only. So you end up having to write code to check if it's initialized.
ThreadLocal<T>
通过让您提供一个在第一次访问项目之前运行的初始化函数(如 Reed 的博客所示)来解决该问题.
ThreadLocal<T>
solves that problem by letting you supply an initialization function (as Reed's blog shows) that's run before the first time the item is accessed.
在我看来,使用 [ThreadStatic]
代替 ThreadLocal<T>
没有任何优势.
In my opinion, there is no advantage to using [ThreadStatic]
instead of ThreadLocal<T>
.
这篇关于ThreadStatic 与 ThreadStatic 对比ThreadLocal<T>:泛型比属性好吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ThreadStatic 与 ThreadStatic 对比ThreadLocal<T>:泛型比属性好吗?
基础教程推荐
- rabbitmq 的 REST API 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01