我有一个异步下载器类,我想用服务层的不同设置来控制它。
在下载器类中,我有以下设置来控制下载的处理方式。不要介意监视器等。继续关注调用者:)
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 表达式来控制流?