gpt4 book ai didi

c# - ASP.NET Core 中的持久内存并发字典

转载 作者:行者123 更新时间:2023-12-04 00:26:58 27 4
gpt4 key购买 nike

在 ASP.NET Core 应用程序中,我希望具有类似于以下内容的持久共享状态:

ConcurrentDictionary<string, Job> Jobs;

应用程序的各种组件将访问此共享状态(请求处理 Controller 、后台任务),但我主要关注的不是并发访问。我很好奇的是是否有办法在我的 ASP.NET Core 应用程序的整个生命周期中保留这样的全局变量。

有没有地方可以定义这个全局 Jobs ASP.NET Core 运行时不会销毁它的变量?也许利用 MemoryCache某种程度上来说?

使用像 Redis 这样的东西肯定会奏效,但我很好奇是否有针对 ASP.NET Core 中全局共享状态的健壮的内存/进程内解决方案。

最佳答案

您可以包装 ConcurrentDictionary在一个类中并将其注册为单例。

public class SharedJobs
{
private readonly ConcurrentDictionary<string, Job> _jobs
= new ConcurrentDictionary<string, Job>();

public ConcurrentDictionary<string, Job> Jobs => _jobs;
}

在 Startup.cs 中
services.AddSingleton<SharedJobs>();

用法
public class Service
{
private readonly SharedJobs _shared;

public Service(SharedJobs shared) => _shared = shared;

public void DoSomething()
{
var job = _shared.Jobs.GetOrAdd("Key", new Job("New Job when not found"));
}
}

您可以进一步隐藏您正在使用的事实 ConcurrentDictionary在引擎盖下,只向消费者公开所需的功能。
public class SharedJobs
{
private readonly ConcurrentDictionary<string, Job> _jobs
= new ConcurrentDictionary<string, Job>();

public Job Get(string key)
{
return _jobs.GetOrAdd(key, CreateNewJob());
}

private Job CreateNewJob() {}
}

关于c# - ASP.NET Core 中的持久内存并发字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800600/

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