【问题标题】:What exactly is the thread context in C#?C# 中的线程上下文到底是什么?
【发布时间】:2013-05-29 16:08:43
【问题描述】:

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

我想要一种将这两个日志绑定在一起的方法,以便我们查看可能导致异常的原因。为此,我需要某种可以在每次调用时获得的唯一 ID。

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

在网上搜索,我发现了System.Threading.Thread.CurrentContext.SetProperty(),但我想知道这个上下文到底是什么。它是否旨在在线程期间存储属性?每个线程是否唯一?

如果我有 5 个同时 WCF 调用,我不希望上下文中发生的事情之间存在任何冲突,如果它不是“每次调用”的话。

有人可以澄清一下吗?

【问题讨论】:

    标签: c# wcf threadcontext


    【解决方案1】:

    我不会使用该属性,因为 Microsoft 说它仅供内部使用:

    "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/

    【讨论】:

    • 作为更新,如果您使用的是 .NET 4.6,您应该从使用 ThreadLocal 切换到 AsyncLocal,这允许您的存储流过 async/await 边界,最终可能会跳转线程。
    猜你喜欢
    • 2011-05-26
    • 2011-07-21
    • 2017-07-07
    • 2012-03-12
    • 2011-04-24
    • 2015-05-29
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多