暂停一项任务进行多次迭代
Suspend one task for several iterations
我想知道是否可以将一项任务暂停到特定的迭代次数(而不是特定的时间)?
例如,我有这个任务数组,我想在 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);
而不是使用 Task.Run,您可以使用 new Task() 和 task.Start() 来控制何时开始任务(在您的情况下 0 < j < 3)
Task task = new Task(() => {
iteration++;
Console.WriteLine("Task" + iteration);
});
task.Start();
一个任务可能会启动并且运行只能启动一次。任何第二次安排任务的尝试都将导致异常。
建议用户 Task.Run 或 Task.Factory.StartNew(不要使用 task.Start)除非你有理由使用 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)。它将等待所有任务完成(并且不会阻塞单个任务)
我想知道是否可以将一项任务暂停到特定的迭代次数(而不是特定的时间)?
例如,我有这个任务数组,我想在 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);
而不是使用 Task.Run,您可以使用 new Task() 和 task.Start() 来控制何时开始任务(在您的情况下 0 < j < 3)
Task task = new Task(() => {
iteration++;
Console.WriteLine("Task" + iteration);
});
task.Start();
一个任务可能会启动并且运行只能启动一次。任何第二次安排任务的尝试都将导致异常。
建议用户 Task.Run 或 Task.Factory.StartNew(不要使用 task.Start)除非你有理由使用 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)。它将等待所有任务完成(并且不会阻塞单个任务)