ConcurrentDictionary添加和读取数据

时间:2018-01-25 12:49:30

标签: c# concurrentdictionary

我只是测试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();
}

输出截图: enter image description here

我的问题:正如您从屏幕截图中看到的那样,数据是按顺序添加的,但读数不是连续的。为什么会这样?

0 个答案:

没有答案