我有一个异步下载程序类,我想用服务层的不同设置来控制。
在下载程序类中,我有以下设置来控制应如何处理下载。 不要介意监视器等。继续关注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表达式来控制流量?
答案 0 :(得分:2)
在while
中无法丢失lambda而不会失去指定自定义完成查询委托的多功能性。您正在使用委托来存储代码,以调用您必须进行调用的委托。
另一方面,如果您不喜欢代码的.Invoke
部分,请将其删除:
while (!this.CompletionQuery(new CompletionParams { ItemsToDownload = items.Count(), TimeoutInMilliseconds = sw.ElapsedMilliseconds }))
但正如评论中指出的那样,这仍然会在下面进行调用。