【发布时间】:2018-06-16 21:56:41
【问题描述】:
我有一个基于插件的系统,它大量使用 .Net Task / TPL 来执行并行工作流。 worker 是执行各种类型任务的插件,构建在主处理应用程序之外,编译为 DLL 并放入插件目录中。
worker 插件将使用 Trace 消息来输出他们正在做的事情。我很想用仅在父应用程序中知道的附加上下文信息来补充这些 Trace 消息。这也意味着我需要以某种方式弄清楚跟踪消息来自什么上下文(它来自哪个 Task)
具体用例:
- 父应用程序从队列中选择要完成的“工作”。
- 应用程序找到合适的工作插件来执行所请求的工作类型
- 父级创建一个新任务供插件在其中工作,建立一个与此工作任务关联的 WorkID 并启动进程
- 当插件使用 Trace.WriteLine() 之类的东西时,我希望用从主应用程序建立的 WorkID 来补充该消息(插件对此一无所知)
我知道我可以将日志实现传递给插件,但是我必须重新编写我所有的插件以期望,并使用该日志实现。
有没有办法做到这一点?
【问题讨论】:
-
您应该查看“CallContext”,关于 tpl - Stephen Cleary 在这里有一篇很好的文章:blog.stephencleary.com/2013/04/…
标签: .net plugins task-parallel-library