相关疑难解决方法(0)

多个线程将元素添加到一个列表.为什么列表中的项目总是少于预期?

以下代码解释了我的问题.我知道列表不是线程安全的.但是这个潜在的"真正"原因是什么?

    class Program
{
    static void Main(string[] args)
    {
        List<string> strCol = new List<string>();

        for (int i = 0; i < 10; i++)
        {
            int id = i;
            Task.Factory.StartNew(() =>
            {
                AddElements(strCol);
            }).ContinueWith((t) => { WriteCount(strCol, id.ToString()); });
        }

        Console.ReadLine();
    }

    private static void WriteCount(List<string> strCol, string id)
    {
        Console.WriteLine(string.Format("Task {0} is done. Count: {1}. Thread ID: {2}", id, strCol.Count, Thread.CurrentThread.ManagedThreadId));
    }

    private static void AddElements(List<string> strCol)
    {
        for (int i = 0; i < 20000; i++)
        {
            strCol.Add(i.ToString());
        } …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing concurrency multithreading task-parallel-library

12
推荐指数
2
解决办法
1万
查看次数