我有一个 WCF 服务,它会记录对数据库的每次调用。稍后,如果发生异常,它也会被记录到一个单独的数据库中。
我想要一种方法将这两个日志联系在一起,以便我们可以查看可能导致异常的原因。为此,我需要某种唯一 ID,我可以为每次调用获取该 ID。
因为整个事情都在单个线程上执行,例如,我可以将线程名称设置为 GUID,例如。 System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString();
但这有点老套。
在网上搜索时,我发现了 System.Threading.Thread.CurrentContext.SetProperty()
但我想知道那个上下文到底是什么。它是否设计用于在线程持续时间内存储属性?它是每个线程唯一的吗?
如果我有 5 个同时的 WCF 调用,我不希望上下文中发生的事情之间存在任何冲突,如果它不是“每次调用”的话。
有人可以澄清一下吗?
最佳答案
我不会使用该属性,因为 Microsoft 说它仅供内部使用:
“此 API 支持 .NET Framework 基础结构,不应直接在您的代码中使用。”
但是,您应该可以使用 Thread Local Storage
做同样的事情。该链接提供了一个示例,展示了如何为线程设置字符串属性。
另见 http://www.c-sharpcorner.com/UploadFile/1d42da/working-with-thread-local-storagetls-in-C-Sharp/
关于c# - C# 中的线程上下文到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897905/