这只是用来说明我的问题的示例代码。
假设我有以下课程:
enter code here
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Concurrent;
namespace BoxesA4
{
class Box
{
public double length { get; set; }
public double width { get; set; }
public double height { get; set; }
ConcurrentDictionary<int, string> boxItems = new ConcurrentDictionary<int, string>();
public Box(double length,double width,double height)
{
this.length=length;
this.width = width;
this.height = height;
}
public double volume()
{
return this.length * this.width * this.height;
}
public void add(int index,string item)
{
boxItems.TryAdd(index, item);
}
}
}
主:
static void Main(string[] args)
{
Box createBox = new Box(10,10,5,5);
createBox.add(0,"hammer");
createBox.add(1,"saw");
}
在我的main方法中,我调用了createBox.add();并传递必要的论据。在调用我的add方法时,我是否必须担心线程安全? 我不想让Box类静态。如果线程安全是一个问题,我将如何修复我的代码?
答案 0 :(得分:1)
假设ConcurrentDictionary.TryAdd
的行为符合您的要求,您就可以了。如果您将boxItems
字段设为只读,那么您将处于更好的位置。
当您使用并发集合时,有必要详细阅读文档,以确切了解可能发生的情况。例如,可能想要AddOrUpdate
而不是TryAdd
- 如果密钥已经存在于字典中,那么想要会发生什么?
答案 1 :(得分:0)
Thread safety is not an issue in your case
。你的box.add方法有效地添加到线程安全的Concurrent dictionary。所以你不必担心线程安全。