簡體   English   中英

Observable.Interval等待操作完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM