C#中的线程上下文究竟是什么?

时间:2013-06-03 13:28:24

标签: c# wcf threadcontext

我有一个WCF服务,它会记录每次调用数据库。稍后,如果发生异常,它也会记录到单独的数据库中。

我想要一种将这两个日志绑定在一起的方法,以便我们可以看到可能导致异常的原因。为此,我想要为每次通话获得某种独特的ID。

由于整个事情在单个线程上执行,我可以例如将线程名称设置为GUID,例如。 System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString();但是这有点笨拙。

在网上搜索,我发现了System.Threading.Thread.CurrentContext.SetProperty(),但我想知道那个背景是什么。它是否设计用于存储线程持续时间的属性?每个线程都是唯一的吗?

如果我同时有5个WCF呼叫,我不希望在上下文中发生什么冲突,如果它不是“每个呼叫”可以这么说。

有人可以澄清吗?

1 个答案:

答案 0 :(得分:6)

我不会使用该属性,因为微软称它仅供内部使用:

"This API supports the .NET Framework infrastructure and is not intended to be used directly from your code."

但是,你应该可以使用Thread Local Storage来做同样的事情。该链接给出了一个示例,说明如何为线程设置字符串属性。

另见http://www.c-sharpcorner.com/UploadFile/1d42da/working-with-thread-local-storagetls-in-C-Sharp/

相关问题