私は、非同期メソッドの反復を実行する最善の方法を考え出しています。 基本的には、最初のタイムパンでは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などのいずれかである。 私は辞書で
TimeSpan
で定義されている(非同期メソッドごと
X
ミリを実行する必要があります例えば、各
Item
に対して
:。例の2つの項目のことを意味
public async Task<int> MyMethod(Item item)
{
return await 3; // In reality something is done and a result is returned
}
と60秒のタイムスパン、私はT00:00
で開始した場合、私はT00:00
時およびで(item1
6回(T00:00
、T00:10
、T00:20
などで)ためとitem2
2回MyMethod
を実行する必要があります)。
この部分は比較的単純ですが、ちょっと苦労しているのは、iteration
を60秒後にもう一度繰り返して、前の手順が完了したかどうかを確認することです。例えば、item1
ためMyMethod
が、私はまだある時点で私はアクティブitem1
ためMyMethod
の複数の実行を持っていることを意味している60
秒(後に別の反復を開始したい完了するまでに12秒かかります。
私がやろうとした
何かがContinueWith(() => { MyMethod(item)
とMyMethod
への再帰呼び出しvoid
ですが、それは仕事を得ることができませんでした。
タイマでRxを試しましたか? – VMAtm