2011-03-07 86 views
2

我有一個異步下載類,我想用服務層的不同設置來控制。Func Invoke,有沒有更好的解決方案

在下載器類中,我有以下設置來控制如何處理下載。 不介意顯示器等繼續專注於祈求:)

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

Invoke有什麼問題? – JohnC 2011-03-07 21:14:59

回答

2

在沒有失去指定自定義完成查詢委託的多功能性的情況下,沒有辦法在while中丟失lambda。您正在使用委託來存儲代碼,以調用委託,您必須執行調用。

如果在另一方面,你就是不喜歡你的代碼的.Invoke部分,只是將其刪除:

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

但正如在評論中已經指出的那樣,這仍然會做一個Invoke下方。

相關問題