1
我試圖想出運行異步方法迭代的最佳方法。 基本上,我得到第一個TimeSpan
和Dictionary<Item,TimeSpan>
在第一個時間段內運行。無限期運行異步方法迭代(使用嵌套迭代)
例如:
var iteration = new TimeSpan().FromSeconds(60);
var items = new Dictionary<Item,TimeSpan>();
items.Add(item1,new TimeSpan().FromSeconds(10))
items.Add(item2,new TimeSpan().FromSeconds(30))
它是安全的假設:
- 字典中的項目
TimeSpan
總是<
比iteration
iteration
,當轉換爲秒,總適合N
TimeSpan
字典中的項目(如果迭代比項目的時間跨度長60秒1或2或3或6或10或15等。
對於每個Item
我需要運行的異步方法每隔X
毫秒(通過在字典中TimeSpan
所定義,例如:
public async Task<int> MyMethod(Item item)
{
return await 3; // In reality something is done and a result is returned
}
這意味着對於本例中的兩個項目和在60秒的時間跨度,如果我在T00:00
開始我需要爲item1
6次運行MyMethod
在T00:00
和(在T00:00
,T00:10
,T00:20
等)和item2
2倍()。
現在,這部分是比較簡單的,我正在努力的一點是使iteration
在60秒內重複,並確保它開始是否前一個完成與否。例如,如果MyMethod
爲item1
需要12秒來完成我仍然希望60
秒之後開始另一次迭代(這意味着在某一時間點我將具有MyMethod
一個以上執行對item1
活性。
東西,我試圖做的是遞歸void
調用MyMethod
與ContinueWith(() => { MyMethod(item)
,但不能讓它的工作。
你有沒有用定時器試試Rx? – VMAtm