【问题标题】:Multiple threading in parallel多线程并行
【发布时间】:2015-02-18 08:52:45
【问题描述】:

我想知道背靠背运行多个线程以及执行顺序将如何流动。所以我刚刚创建了一个控制台应用程序来深入了解线程概念。

请找代码

class Program
{
    static void Main(string[] args)
    {
        List<System.Threading.Tasks.Task> task = new List<System.Threading.Tasks.Task>();
        for(int i = 0 ; i<=100; i++)
        {
            System.Threading.Tasks.Task task1 = System.Threading.Tasks.Task.Run(() => Directory.CreateDirectory("D://Dummy"+i+""));
            task.Add(task1);
        }
        System.Threading.Tasks.Task.WaitAll(task.ToArray());
        foreach(var tasks in task)
        {
            Console.WriteLine("Task Id {0} IsCompleted {1} Status {2} IsFaulted {3} ", tasks.Id, tasks.IsCompleted, tasks.Status, tasks.IsFaulted);

        }
        Console.ReadLine();
    }
}

当我执行上面的代码时,我遇到了一些如下所列的查询

1)当我在第一个 for 循环中遇到断点时,我能够创建文件夹,但当我刚刚执行控制台时却不行。为最后一个迭代值创建的文件夹(101)实际上最后一个值是100但也不知道101是怎么来的?

2)线程处理的顺序是随机的,而不是队列中的顺序

【问题讨论】:

    标签: multithreading task


    【解决方案1】:

    如果你想运行线程以便在方法中使用同步关键字 例子-

    public synchronized void methodName() {}
    

    【讨论】:

    • 那么为什么进程没有按预期执行。没有创建 100 个文件夹'
    • 在循环中你写条件'for(int i = 0; i
    • 应根据代码创建 100 个文件夹,但在调试时创建,而不是在没有断点时创建
    • 我没有正确理解你。
    • 根据代码它应该创建 100 个目录。当我的代码中有断点并一一执行时,它会正确创建。但不是当我运行控制台应用程序时。你能得到吗?