4

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

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

   private PictureList FetchPictures(List<Picture> wallResults) 
   {                
            wallResults
                .AsParallel()
                .WithDegreeOfParallelism(10)
                .ForAll(delegate(Picture p){
4

1 回答 1

2

您可以WithCancellation()为此使用:

var cts = new CancellationTokenSource(timeout);

wallResults
    .AsParallel()
    .WithCancellation(cts.Token)
    .WithDegreeOfParallelism(10)
    .ForAll(p => { …

如果你不能使用.Net 4.5,你将无法使用接受超时的构造函数CancellationTokenSource,所以你必须Timer手动使用。

于 2013-08-10T10:11:23.127 回答