小编wol*_*ski的帖子

处理事件日志中的事件并对某种模式做出反应(Rx?)

我需要处理来自EventLog的事件.使用附加到EventRecordWritten事件的EventLogWatcher很容易.但是我感兴趣的查询(eventid == 299 || eventid == 500)提供了比我需要的更多的事件.这是流的示例

Event ID   Correlation ID
299        1AD...  (this is actually a guid)  X1
500        1AD...                             X2
500        1AD...
500        1AD...
299        43B...                             Y1
299        EDB...                             Z1
500        43B...                             Y2
500        EDB...                             Z2
500        43B...
500        43B...
Run Code Online (Sandbox Code Playgroud)

我对事件299以及与299事件的相关id匹配的第一个事件500感兴趣.我在上面的流中标记了它们,这是我感兴趣的输出集合:[X1, X2, Y1, Y2, Z1, Z2]这可能是使用相关id作为键的字典和EventRecord作为值的元组

{ 1AD.., <X1, X2> }
{ 43B.., <Y1, Y2> }
{ EDB.., <Z1, Z2> }
Run Code Online (Sandbox Code Playgroud)

一般情况下,事件可能会按顺序排列(299然后是500),但在高并发情况下,我预见会有两个299个事件,然后是500个事件,所以我不想依赖事件发生的顺序.相关id是关联它们的关键(这是事件的第一个属性eventRecord.Properties[0])

我认为这可以通过状态机来解决,但是看看是否有人想出一个Rx的解决方案,这个解决方案由一个可观察的查询表示,这将是很有趣的.这将使模式匹配逻辑保持在一个位置.

更新:这是解决方案的答案.谢谢基甸,这正是我需要的起点!

var pairs = events
            .Where(e299 …
Run Code Online (Sandbox Code Playgroud)

event-log system.reactive

6
推荐指数
1
解决办法
496
查看次数

标签 统计

event-log ×1

system.reactive ×1