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表达式可以调用命名方法或提供内联代码示例显示了一个基本调用,该调用创建并启动两个并发运行的任务。