サービスレイヤーとは異なる設定で制御したい非同期ダウンローダークラスがあります。
ダウンローダークラスでは、ダウンロードの処理方法を制御するために次の設定を行いました。モニターなどは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を使用していることです。
フローを制御するために用途の広いラムダ式を使用するより良い方法はありますか?