1 回答
TA贡献1825条经验 获得超6个赞
我不确定创建数百个任务是否是一个好习惯
没关系。Parallel使用智能分区。
关于代码的其余部分,Interlocked可以用作计数器,但您不想在没有互锁障碍的情况下访问相同的变量。该CancellationToken代码需要简化:
private async Task RunBatchOCR(List<Printout> printouts, IProgress<int> progress)
{
int counter = 0;
progress?.Report(0);
try
{
Parallel.ForEach(printouts, new ParallelOptions { CancellationToken = source.Token }, printout =>
{
printout.OcrHelper.runOCR(); //loads bitmap and extracts text
var update = Interlocked.Increment(ref counter);
progress?.Report(update);
Console.WriteLine(update.ToString());
});
}
catch (OperationCanceledException)
{
Console.WriteLine("Task was cancelled");
cancelButton.Enabled = false;
}
}
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报