代码之家  ›  专栏  ›  技术社区  ›  Ryan Griffith

补充/超控系统。诊断的。使用父TPL任务的上下文跟踪消息

  •  0
  • Ryan Griffith  · 技术社区  · 7 年前

    我有一个基于插件的系统,使用。净任务(<>/第三方物流大力开展并行工作流程。Worker是执行各种类型任务的插件,在主处理应用程序之外构建,编译为DLL并放入插件目录。

    工作者插件将使用跟踪消息输出他们正在做的事情。我希望用仅在父应用程序中已知的其他上下文信息来补充这些跟踪消息。这也意味着我需要以某种方式找出跟踪消息来自什么上下文(它来自哪个任务)

    具体用例:

    • 父应用程序从队列中提取要完成的“工作”。
    • 应用程序找到合适的worker插件来执行所请求的工作类型
    • 父任务创建一个新任务<&燃气轮机;为了使插件在其中工作,建立一个与此工作任务相关联的WorkID,并启动流程
    • 当插件使用类似跟踪的东西时。WriteLine(),我希望用从主应用程序建立的工作ID来补充该消息(插件对此一无所知)

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

    有没有办法做到这一点?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Ryan Griffith    6 年前

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

    例子:

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