簡體   English   中英

如何鏈接ETW啟動/停止Opcode並發事件

[英]How to link ETW start/stop Opcode concurrent events

我正在使用ETW,並記錄一些具有停止和停止操作碼的事件,例如

[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,自.Net 4.6以來一直有效 要自動運行,您不能使用自己的Thread實現,必須將所有調用包裝到System.Threading.Tasks.Task調用中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM