gpt4 book ai didi

.net - 将 LINQ ToDictionary 与 ConcurrentDictionary 结合使用

转载 作者:行者123 更新时间:2023-12-04 20:02:55 24 4
gpt4 key购买 nike

我在多线程应用程序中使用字典来收集事件,在添加事件时使用锁,在搜索事件时不使用它。每隔一小时左右,我就会对早于特定时间的事件进行清理。非常简单而且有效。

我想移动到 ConcurrentDictionary 来移除锁,我想我只需要添加“Concurrent”并将 Add 更改为 TryAdd。但是后来我遇到了 LINQ 只返回 ToDictionary 的错误。我显然不能使用 LINQ,但我很想知道是否可以做些什么来保护它。更重要的是,在转向 ConcurrentDictionry 之前,还有什么我应该考虑的吗?

public class messageResult
{
public Result result;
public DateTime receivedTime;
}


public Dictionary<Guid, messageResult> events = new Dictionary<Guid, messageResult>();


lock (events)
{
events = events.Where(p => p.Value.receivedTime >= t).ToDictionary(p => p.Key, p => p.Value);
}

谢谢

最佳答案

它看起来像 ToDictionary extension method没有那么复杂,您可以创建自己的版本。

但请注意 ToDictionary 返回新对象,而您希望拥有一个字典并在您的线程之间共享它。

您不应该锁定可变变量(并且您还更改了对 events 的实际引用),创建私有(private)只读变量并将其用于锁定。

关于.net - 将 LINQ ToDictionary 与 ConcurrentDictionary 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com