2

我有一个异步下载器类,我想用服务层的不同设置来控制它。

在下载器类中,我有以下设置来控制下载的处理方式。不要介意监视器等。继续关注调用者:)

public Func<CompletionParams, bool> CompletionQuery { get; set; }

        public class CompletionParams
        {
            public int ItemsToDownload { get; set; }
            public long TimeoutInMilliseconds { get; set; }
        }

//这里还有一些其他的东西

 while (!this.CompletionQuery.Invoke(new CompletionParams { ItemsToDownload = items.Count(), TimeoutInMilliseconds = sw.ElapsedMilliseconds }))
                lock (this.waitForMe)
                    Monitor.Wait(waitForMe, 250);

然后我在服务层中配置我的下载器,如下所示:

downloaderFoo.CompletionQuery = limit => 
                limit.ItemsToDownload >= 22 || limit.TimeoutInMilliseconds > 2000;

但我不喜欢的是 while 循环使用 .Invoke

有没有更好的方法来使用通用的 lambda 表达式来控制流?

4

1 回答 1

2

没有办法在while不丢失指定自定义完成查询委托的多功能性的情况下丢失 lambda。您正在使用委托来存储代码,要调用委托,您必须执行 Invoke。

另一方面,如果您只是不喜欢.Invoke您的代码部分,只需将其删除:

while (!this.CompletionQuery(new CompletionParams { ItemsToDownload = items.Count(), TimeoutInMilliseconds = sw.ElapsedMilliseconds }))

但正如评论中指出的那样,这仍然会在下面进行调用。

于 2011-03-07T22:41:57.257 回答