基础之ThreadStatic
public class Bean { public Bean() { } public static String Current { get { if (guid == null) guid = Guid.NewGuid().ToString(); return guid; } } public static String Current2 { get { if (guid2 == null) guid2 = Guid.NewGuid().ToString(); return guid2; } } [ThreadStatic] public static String guid; public static String guid2; }
for (int i = 0; i < 3; i++) { new Thread(() => { Console.WriteLine(Bean.Current.ToString()); Console.WriteLine(Bean.Current2.ToString()); }).Start(); }
概述:
标记为 ThreadStaticAttribute 的静态字段不在线程之间共享。
每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。
如果在不同的线程中访问该字段,则该字段将包含不同的值。
使用场景:
例如通过 [ThreadStatic] private static string ThreadId; 可以标记一个自己生成的Thread ID,这样这个独立的线程中所的所有事情可以通过这个ID来识别,可以生成这个线程的程序流水作业日志等。
注意:
建议不要为标记为 ThreadStaticAttribute 的字段指定初始值,因为这样的初始化只会发生一次,因此在类构造函数执行时只会影响一个线程。在不指定初始值的情况下,如果它是值类型,可依赖初始化为其默认值的字段,如果它是引用类型,则可依赖初始化为空引用的字段。
分类:
C#基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)