CodeGo.net>如何链接ETW开始/停止操作码并发事件
作者:互联网
我正在使用ETW,并记录了一些具有stop&停止操作码,例如
[Event(1, Task = Tasks.ActivateTask, Opcode = EventOpcode.Start)]
public void ActivateTaskStart(string TaskName)
{
if (IsEnabled())
{
WriteEvent(1, TaskName);
}
}
[Event(2, Task = Tasks.ActivateTask, Opcode = EventOpcode.Stop)]
public void ActivateTaskStop(string TaskName)
{
if (IsEnabled())
{
WriteEvent(2, TaskName);
}
}
如果我有两个都同时记录ActivateTask启动/停止事件的线程,如何确保事件正确配对?例如如果我有:
> Thead-A:ActivateTaskStart
> Thead-B:ActivateTaskStart
然后再
> Thead-A:ActivateTaskStop
> Thead-B:ActivateTaskStop
从我对ETW文档的阅读中,它将默认假定Stop事件属于最新的,未配对的Start事件-但我想确保自己链接的是正确的Start / Stop事件.
那可能吗?如果是这样,怎么办?
为了使事情变得更复杂,Start和Stop事件可能来自不同的线程(如果需要,我应该能够使线程保持粘性).
解决方法:
这称为ActivityTrackig and works since .Net 4.6.要使其自动运行,您不能使用自己的Thread实现,必须将所有调用包装到System.Threading.Tasks.Task调用中.