2017-03-08 63 views
1

我有以下情形,計時器每隔x分鐘:下載邊處理

  1. 下載從靜止服務工作的項目(在php製造)
  2. 運行一個進程批次制定項目

現在應用程序功能齊全,但我希望在應用程序正在處理一個應用程序時加速整個過程下載另一個項目(如果存在於其餘服務中)。

我認爲我需要一個緩衝區/隊列來完成這項工作,比如BlockingCollection,但我不知道如何使用它。

什麼是正確的方式來完成我想要做的?

預先感謝您!

回答

1

你可以做的是創建一個函數,檢查要下載的新文件。讓此函數作爲自己的後臺線程啓動,並以無限循環運行,檢查每次迭代中的新下載。如果它發現任何需要下載的文件,請調用一個單獨的函數將文件作爲新線程下載。然後,這個新的下載功能可以在文件完成下載後作爲另一個線程調用處理功能。使用這種方法,如果需要,您將爲多個文件並行運行所有任務。

功能可以通過做這個

Thread thread = new Thread(FunctionName); 
thread.start(); 
0

使用微軟的反應框架(的NuGet 「System.Reactive」)啓動新的線程。那麼你可以這樣做:

var x_minutes = 5; 

var query = 
    from t in Observable.Interval(TimeSpan.FromMinutes(x_minutes)) 
    from i in Observable.Start(() => DownloadAnItem()) 
    from e in Observable.Start(() => ElaborateItem(i)) 
    select new { i, e }; 

var subscription = 
    query.Subscribe(x => 
    { 
     // Do something with each `x.i` & `x.e` 
    }); 

多線程和簡單。

如果你想停止處理,然後只需撥打subscription.Dispose()