Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定与linq对象并行的任务超时_C#_Linq_Task Parallel Library_Linq To Objects - Fatal编程技术网

C# 指定与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

我有一个图片列表,我想并行处理,但有一个超时。我的旧代码是通过对项目进行分页并使用WaitHandles来实现的,但我想使用.NET4中提供的新的并行Linq或任务库

下面的代码段正在工作,如何向其添加超时?(超时将针对执行的每个任务,而不是所有要处理的项目)

私有图片列表获取图片(列表结果)
{                
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 => { …