【发布时间】:2015-04-30 02:47:22
【问题描述】:
我有一个处理从数据库中提取的图像的应用程序。我需要并行处理各种图像,因此我将 .NET TPL 与 Tasks 一起使用。
我的应用程序是 C# 中的 Winforms 应用程序。我只能选择启动多少个进程和一个“开始”按钮。我现在的做法是这样的:
private Action getBusinessAction(int numProcess) {
return () =>
{
try {
while (true) {
(new BusinessClass()).doSomeProcess(numProcess);
tokenCancelacion.ThrowIfCancellationRequested();
}
}
catch (OperationCanceledException ex) {
Console.WriteLine("Cancelled process");
}
};
}
...
for (int cnt = 0; cnt < NUM_OF_MAX_PROCESS; cnt++) {
Task.Factory.StartNew(getBusinessAction(cnt + 1), tokenCancelacion);
}
在这种情况下,如果我选择 8 作为进程数,它将启动 8 个正在运行的任务,直到应用程序关闭。但我认为更好的方法是启动一些调用doSomeProcess 方法的任务,然后完成。但是当任务完成时,我想启动相同的任务或启动执行相同任务的新实例,以便始终并行运行该数量的进程。 TPL 中有没有办法实现这一点?
【问题讨论】:
-
任务如何完成?你在那里有一个无限循环。
-
如果对你有用的话,可能是一些重载的 Task.WaitAny 方法msdn.microsoft.com/library/dd270672(v=vs.110).aspx
-
@SriramSakthivel 我已经修改了一点,而不是 while(true) 我在静态类中有一个静态 bool 属性,我也有: tokenCancelacion.ThrowIfCancellationRequested();停止执行。当我按下按钮停止执行任务时,该布尔变量会发生变化,因此while循环会消失。
标签: c# .net task-parallel-library task