我只是测试ConcurrentDictionary
的工作原理。我们知道它是线程安全的。所以我创建了两个任务并同时运行这两个任务。第一个任务将数据添加到ConcurrentDictionary
,第二个任务从中读取数据。我得到的输出有点奇怪。
这是我的程序代码:
static void Main(string[] args)
{
ConcurrentDictionary<string, string> dictionary = new ConcurrentDictionary<string, string>();
Task t1 = Task.Factory.StartNew(() =>
{
for (int i = 0; i < 10; ++i)
{
dictionary.TryAdd(i.ToString(), i.ToString());
Console.WriteLine("Adding - > " + i.ToString());
Thread.Sleep(100);
}
});
Task t2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(300);
foreach (var item in dictionary)
{
Console.WriteLine("Reading - > " + item.Key );
Thread.Sleep(150);
}
});
try
{
Task.WaitAll(t1, t2);
}
catch (AggregateException ex)
{
Console.WriteLine(ex.Flatten().Message);
}
Console.ReadLine();
}
输出截图:
我的问题:正如您从屏幕截图中看到的那样,数据是按顺序添加的,但读数不是连续的。为什么会这样?