我想有一个类似于不同线程之间共享的多值字典的全局对象.
我希望只创建一次对象(例如从数据库获取数据),然后由不同的线程使用.
Object应该可以使用其他属性轻松扩展(目前只有JobName和URL).
如果可能的话,我宁愿避免锁定.
我面临以下问题:
这是应该轻松修改的对象结构:
public struct JobData
{
public string JobName;
public string URL;
}
Run Code Online (Sandbox Code Playgroud)
我已经扩展了Dictionary对象,允许每个键有多个值:
public class JobsDictionary : Dictionary<string, JobData>
{
public void Add(string key, string jobName, string url)
{
JobData data;
data.JobName = jobName;
data.URL = url;
this.Add(key, data);
}
}
Run Code Online (Sandbox Code Playgroud)
在Threads之间共享的静态类.正如您所看到的,它在第一次为该Job调用时为特定Job创建了一个Dictionary条目.
例如,第一次调用"收益"时,它将创建"收入"字典条目.这会产生线程安全问题:
public static class GlobalVar
{
private static JobsDictionary jobsDictionary = new JobsDictionary();
public static JobData Job(string jobCat)
{
if (jobsDictionary.ContainsKey(jobCat))
return jobsDictionary[jobCat];
else
{
String jobName;
String url = null; …Run Code Online (Sandbox Code Playgroud)