考虑以下操作:
public Dictionary<string, string> objectDictionary = new Dictionary<string, string>();
source = () =>
{
if (!objectDictionary.ContainsKey("demo"))
{ objectDictionary.Add("demo", "value"); }
};
这个方法不是线程安全的,因为有可能两个线程同时进入到
public Dictionary<string, string> objectDictionary = new Dictionary<string, string>();
条件。
现在,我正在考虑一种解决方案,测试此方法是否线程安全,因此我想出了以下解决方案:
var isThreadSafe = true;
// Check to see if the action can be considered as thread safe.
try { for (var i = 0; i < 1000; i++) { Parallel.Invoke(() => action(), () => action()); } }
catch (Exception) { isThreadSafe = false; }
问题在于布尔变量 'isThreadSafe' 没有被设置为 false。如果我调试应用程序,那么就会出现与线程安全相关的错误,“已经添加了具有相同键的项”。现在,是否有更好的单元测试方法?
2
个任务,干扰的概率较小。使用Parallel.For
可以根据机器资源的可用性并行运行它。我想这应该会有所帮助。 - Sriram Sakthivel