c# - 先读取 IEnumerable 或等待其完成更改

标签 c# linq thread-safety ienumerable

我想阅读 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;
}

这是我遇到的异常:

Additional information: Collection was modified; enumeration operation may not execute. Thanks

最佳答案

使用并发字典。锁定已为您实现。而且它是线程安全的。

关于c# - 先读取 IEnumerable 或等待其完成更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417658/

相关文章:

java - 主线程和单个长时间运行的线程之间的线程安全双向通信

java - 有什么方法或工具可以用来验证我的 API 在 Java 中是否是线程安全的?

c# - 如何从 WCF 回调类更新 GUI 标签?

c# - 所有参数的 WCF WebInvoke POST null

c# - 寻找简单而强大的 windows 通配符 (`*, ?` ) 匹配实现

c# - 如何将匿名对象序列化为 JSON 而不包含属性名称

c# - 重构 LINQ 函数

c# - 按 linq 中的特殊枚举值排序列表

c# - 如何动态构建 () => x.prop lambda 表达式?

c# - 高性能内存缓存的线程安全