使用来自父 TPL 任务的上下文补充/覆盖 System.Diagnostic.Trace 消息

Supplement / override System.Diagnostic.Trace messages with context from parent TPL Task

我有一个基于插件的系统,它大量使用 .Net Task<> / TPL 来执行并行工作流。 worker 是执行各种任务的插件,在主处理应用程序之外构建,编译为 DLL 并放入插件目录。

worker 插件将使用 Trace 消息来输出它们正在做的事情。我很乐意用仅在父应用程序中已知的附加上下文信息来补充这些 Trace 消息。这也意味着我需要以某种方式弄清楚跟踪消息来自什么上下文(它来自哪个 Task<>)

具体用例:

我知道我可以将日志记录实现传递给插件,但随后我必须重新编写我期望的所有插件,并使用该日志记录实现。

有办法实现吗?

根据@barakcaf 的建议,我调查了 CallContext 并解决了我的问题。

示例:

    public async Task TopFunction(string someContextualData)
    {
        CallContext.LogicalSetData("MyVar", someContextualData);

        await ChildFunction();
    }

    public async Task ChildFunction()
    {
        string someContextualData = (string)CallContext.LogicalGetData("MyVar");
    }