读取IEnumerable或等待它先完成更改
本文关键字:IEnumerable 等待 读取 | 更新日期: 2023-09-27 18:01:27
我想在c#中读取字典,并可能使用linq从中获取列表或字典。我的问题是,列表可以在任何时候改变,当我提出请求(即不是线程安全的我猜)。
谁能给我举个例子,我该怎么做?我需要使用lock()吗?
public Dictionary<DateTime, decimal> GetLatest(DateTime since, Dictionary<DateTime, decimal> requestedDict)
{
Dictionary<DateTime, decimal> returnList = new Dictionary<DateTime, decimal>();
returnList = requestedDict.Where(x => x.Key > since).ToDictionary(x => x.Key, x => x.Value);
return returnList;
}
这是我得到的例外:
附加信息:Collection was modified;枚举操作可能不会执行。由于
使用并发字典。锁定是为您实现的。并且它是线程安全的。
你也可以在IDictionary
上实现这个扩展方法然后你可以传入任何你想要并发的字典或其他
public static class Extensions
{
public static IDictionary<DateTime, T> GetLatest<T>(this IDictionary<DateTime, T> dict, DateTime since)
{
var returnList = new Dictionary<DateTime, T>();
returnList = dict.Where(x => x.Key > since).ToDictionary(x => x.Key, x => x.Value);
return returnList;
}
}
你可以这样使用:
dict.GetLatest(new DateTime(2014, 1, 1));