[英]Observable.Interval wait until action is done
Observable.Interval在每個時間段產生值。 如何讓它等到行動在下一次迭代之前結束?
例:
Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(async t =>
{
//Here could be some long running action with different duration each iteration
Console.WriteLine(t.ToString());
await Task.Delay(3000);
});
它將每秒開始行動。 如何讓它等到行動完成?
您要求的是默認行為 - 除非您引入async
/ await
- 因此請刪除async
並使用Task.Delay(3000).Wait()
。
Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(t =>
{
//Here could be some long running action with different duration each iteration
Console.WriteLine(t.ToString());
Task.Delay(3000).Wait();
});
只有觀察者完成后,可觀察對象的合同才會產生新的價值 - 除非你引入async
。
Observable.Interval(TimeSpan.FromSeconds(1))
不會每秒產生一個值 - 它在觀察者完成和下一個觀察者開始之間產生一秒的間隔 。
所以,如果你有一個長時間運行的觀察者,你將在一個完成和下一個開始之間仍然有一整秒。
為什么不自己實施呢? 在while循環或遞歸方法中使用TaskFactory.StartNew 。 然后使用Task.Delay模擬工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.