指定并行 linq to 对象中的任务超时

Pet*_*ter 5 c# linq linq-to-objects task-parallel-library

我有一个要并行处理的图片列表,但有超时。我的旧代码通过对项目进行分页并使用 WaitHandles 来完成此操作,但我想使用 .Net 4 中提供的新 Parallel Linq 或 Tasks 库。

以下代码片段正在运行,我如何为其添加超时?(超时是针对每个正在执行的任务,而不是针对所有要处理的项目的超时)

   private PictureList FetchPictures(List<Picture> wallResults) 
   {                
            wallResults
                .AsParallel()
                .WithDegreeOfParallelism(10)
                .ForAll(delegate(Picture p){
Run Code Online (Sandbox Code Playgroud)

svi*_*ick 3

您可以WithCancellation()为此使用:

\n\n
var cts = new CancellationTokenSource(timeout);\n\nwallResults\n    .AsParallel()\n    .WithCancellation(cts.Token)\n    .WithDegreeOfParallelism(10)\n    .ForAll(p => { \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您无法使用 .Net 4.5,您将无法使用 的超时接受构造函数CancellationTokenSource,因此您必须Timer手动使用。

\n