【发布时间】:2015-10-30 08:25:39
【问题描述】:
我有一组日志事件。我让用户能够过滤掉不同的日志级别。在该过滤过程中,如果添加了新的日志事件,则会引发异常。我可以在过滤集合时锁定它,但这意味着任何新的日志事件都不会以正确的顺序添加,或者根本不会添加(?)。
过滤方式:
//Filters and returns a list of filtered log events
private IEnumerable<LogEvent> FilterLogEvents()
{
return (from x in LogEvents
where ((ViewDebugLogs == true) ? x.Level == "Debug" : false)
|| ((ViewErrorLogs == true) ? x.Level == "Error" : false)
|| ((ViewInfoLogs == true) ? x.Level == "Info" : false)
select x);
}
如果我只返回一个列表,如果它在查询中,也会发生同样的事情。
如何在添加到集合的同时使用它?这里的主要关注点是确保日志事件以正确的顺序添加到集合中,如果它被添加到中间过滤器中。因此,如果我不能同时添加日志事件,我可以以某种方式将它们排队并在之后正确插入它们吗?
【问题讨论】:
-
LogEvents是什么类型? -
尝试使用并发数据结构:msdn.microsoft.com/en-us/library/dd460718(v=vs.110).aspx。或者您可以尝试过滤列表的副本,而不是原始列表。
-
这是一个包含事件相关信息的类型,例如级别,消息,时间戳...等我已经添加到帖子中
-
@douglasg14b 我想他问的是
LogEvent*s*而不是LogEvent。 -
@MatthewWatson 我猜,
LogEvents只是LogEvent的集合。
标签: c# multithreading collections