c# - C# 中的线程上下文到底是什么?

标签 c# wcf threadcontext

我有一个 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/

相关文章:

java - Java项目中的信任边界违规缺陷

c# - WebClient 回调异步结果?

c# - 根据组合框选择从 MySQL 表中选择值?

c# - 在代码隐藏中创建 DataTemplate

wcf - 如何禁用 WCF 测试客户端 - VS 2012

c# - 如何在WCF服务中添加OWIN Startup

wcf - 如何从 WCF 服务返回干净的 JSON?

c - 如何在 64 位进程(Windows)上正确保存和恢复线程上下文?

c# - 从 Roslyn 中的行号获取节点

c# - 线程的执行上下文