Func Invoke,是否有更好的解决方案

时间:2011-03-07 21:02:15

标签: c# lambda controls flow func

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

在下载程序类中,我有以下设置来控制应如何处理下载。 不要介意监视器等。继续关注Invoker:)

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表达式来控制流量?

1 个答案:

答案 0 :(得分:2)

while中无法丢失lambda而不会失去指定自定义完成查询委托的多功能性。您正在使用委托来存储代码,以调用您必须进行调用的委托。

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

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

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