其他分享
首页 > 其他分享> > CodeGo.net>如何链接ETW开始/停止操作码并发事件

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调用中.

标签:etw,c
来源: https://codeday.me/bug/20191119/2036996.html