Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任务不存在';不要并行运行_C#_Multithreading_Parallel Processing_Task Parallel Library_Task - Fatal编程技术网

C# 任务不存在';不要并行运行

C# 任务不存在';不要并行运行,c#,multithreading,parallel-processing,task-parallel-library,task,C#,Multithreading,Parallel Processing,Task Parallel Library,Task,我有一个任务,但其中的进程不是并行运行的。第二个等待第一个完成。你能解释一下我为什么以及如何纠正这个问题吗?我想让它们同时运行 第二个问题,我应该使用任务而不是线程吗 提前谢谢 new Task(() => { Counter1(); Counter2(); }).Start(); private void Counter2() { fo

我有一个任务,但其中的进程不是并行运行的。第二个等待第一个完成。你能解释一下我为什么以及如何纠正这个问题吗?我想让它们同时运行

第二个问题,我应该使用任务而不是线程吗

提前谢谢

 new Task(() =>
            {
                Counter1();
                Counter2();
            }).Start();




    private void Counter2()
    {
        for (int i = 0; i < 30; i++)
        {
            Thread.Sleep(500);
            label2.Text = i.ToString();
        }
    }

    private void Counter1()
    {
        for (int i = 0; i < 30; i++)
        {
            Thread.Sleep(500);
            label3.Text = i.ToString();
            if(i == 15)
                Thread.Sleep(3000);
        }
    }
新任务(()=>
{
计数器1();
计数器2();
}).Start();
私人秘书2()
{
对于(int i=0;i<30;i++)
{
睡眠(500);
label2.Text=i.ToString();
}
}
私人无效计数器1()
{
对于(int i=0;i<30;i++)
{
睡眠(500);
label3.Text=i.ToString();
如果(i==15)
睡眠(3000);
}
}
使用并调用
Counter1()
Counter2()
,如下MSDN中的示例所示(在更新
()
匿名lambda调用以调用您的2个方法之后)

        #region ParallelTasks
        // Perform three tasks in parallel on the source array
        Parallel.Invoke(() =>
                         {
                             Console.WriteLine("Begin first task...");
                             GetLongestWord(words);
                         },  // close first Action

                         () =>
                         {
                             Console.WriteLine("Begin second task...");
                             GetMostCommonWords(words);
                         }, //close second Action

                         () =>
                         {
                             Console.WriteLine("Begin third task...");
                             GetCountForWord(words, "species");
                         } //close third Action
                     ); //close parallel.invoke

        Console.WriteLine("Returned from Parallel.Invoke");
        #endregion

父任务-可以使用子任务

new Task(() =>
{
     Task.Factory.StartNew(Counter1);
     Task.Factory.StartNew(Counter2);
}).Start();

private void Counter2()
{
    for (int i = 0; i < 30; i++)
    {
        Thread.Sleep(500);
        label2.Text = i.ToString();
    }
}

private void Counter1()
{
    for (int i = 0; i < 30; i++)
    {
        Thread.Sleep(500);
        label3.Text = i.ToString();
        if(i == 15)
            Thread.Sleep(3000);
    }
}e
新任务(()=>
{
任务.工厂.开始新建(计数器1);
任务.工厂.新启动(计数器2);
}).Start();
私人秘书2()
{
对于(int i=0;i<30;i++)
{
睡眠(500);
label2.Text=i.ToString();
}
}
私人无效计数器1()
{
对于(int i=0;i<30;i++)
{
睡眠(500);
label3.Text=i.ToString();
如果(i==15)
睡眠(3000);
}
}e

Tasks运行常规方法。您需要两个任务。我等待类似的东西:Parallel.Invoke。不能这样做吗?是的;那也可以。您能告诉我,如果我想用Task实现它,我如何实现它吗?我知道,我可以用这种方式实现,但我想用Task实现它。有办法吗?好的,这是唯一的方法。从同一个MSDN ar请参阅
Parallel.Invoke方法提供了一种方便的方法,可以同时运行任意数量的任意语句。只需为每个工作项传入一个操作委托。创建这些委托的最简单方法是使用lambda表达式。lambda表达式可以调用命名方法或提供内联代码示例显示了一个基本调用,该调用创建并启动两个并发运行的任务。