我想知道是否可以将一个任务暂停到特定的迭代次数(而不是特定的时间)?
例如,我有这个任务数组,我想在迭代中暂停数组中的一个任务,其中0< j< 3。
int iteration = 0;
var tasksArray = new Task[NUM_THREADS];
for (int j = 0; j < NUM_REPEAT_THREADS; j++)
{
for (int i = 0; i < NUM_THREADS; i++)
{
tasksArray[i] = Task.Run(() =>
{
iteration++;
Console.WriteLine("Task" + iteration);
});
tasksArray[i].Wait();
}
iteration = 0;
}
Task.WaitAll(tasksArray);
答案 0 :(得分:0)
您可以使用新的Task()和task.Start()来控制何时启动任务(在您的情况下,0&lt; j&lt; 3)
,而不是使用Task.Run。Task task = new Task(() => {
iteration++;
Console.WriteLine("Task" + iteration);
});
task.Start();
任务可以启动并仅运行一次。任何第二次安排任务的尝试都将导致异常。
除非您有理由使用task.Start()),否则建议用户使用Task.Run或Task.Factory.StartNew(并且不要使用task.Start)。执行此操作的一种情况是,您需要将任务的创建与其执行分开,例如当您有条件地执行您创建的任务时。
更多细节: https://msdn.microsoft.com/en-us/library/dd270682(v=vs.110).aspx
https://blogs.msdn.microsoft.com/pfxteam/2010/06/13/task-factory-startnew-vs-new-task-start/
下面的行也导致同步等待任务完成。
tasksArray[i].Wait();
理想情况下,只应使用Task.WaitAll(tasksArray)。它将等待所有任务完成(并且不会阻止单个任务)