C# 指定与linq对象并行的任务超时
我有一个图片列表,我想并行处理,但有一个超时。我的旧代码是通过对项目进行分页并使用WaitHandles来实现的,但我想使用.NET4中提供的新的并行Linq或任务库 下面的代码段正在工作,如何向其添加超时?(超时将针对执行的每个任务,而不是所有要处理的项目)C# 指定与linq对象并行的任务超时,c#,linq,task-parallel-library,linq-to-objects,C#,Linq,Task Parallel Library,Linq To Objects,我有一个图片列表,我想并行处理,但有一个超时。我的旧代码是通过对项目进行分页并使用WaitHandles来实现的,但我想使用.NET4中提供的新的并行Linq或任务库 下面的代码段正在工作,如何向其添加超时?(超时将针对执行的每个任务,而不是所有要处理的项目) 私有图片列表获取图片(列表结果) { wallResults .天冬酰胺() .平行度(10) .ForAll(代表)(图p){ 您可以使用: var cts = new CancellationToken
私有图片列表获取图片(列表结果)
{
wallResults
.天冬酰胺()
.平行度(10)
.ForAll(代表)(图p){
您可以使用:
var cts = new CancellationTokenSource(timeout);
wallResults
.AsParallel()
.WithCancellation(cts.Token)
.WithDegreeOfParallelism(10)
.ForAll(p => { …
如果您不能使用.Net 4.5,您将无法使用
CancellationTokenSource
的超时接受构造函数,因此您必须手动使用计时器。您是否签出CancellationTokenSource并在超时后使用计时器取消?@seshuk-请查看我在svick的答案上留下的评论,我相信它适用于您r链接,因为它们都涉及CancellationToken。我很感谢您的回答,但从我可以看出,这不是我想要的。“超时将是每个正在执行的任务的超时,而不是所有要处理的项目的超时。”从我所读到的内容来看,取消toke是一种整体取消ForAll操作的方法,并没有给你指定在一定时间后取消单个项目的粒度。如果我误读了MSDN文档/你的答案,请纠正我。哦,我一定忽略了你任务中括号中的那部分在这种情况下,这与PLINQ无关,完全取决于您在ForAll()委托中运行的代码。
var cts = new CancellationTokenSource(timeout);
wallResults
.AsParallel()
.WithCancellation(cts.Token)
.WithDegreeOfParallelism(10)
.ForAll(p => { …