【问题标题】:How to set starting value in Observable with intervals如何在 Observable 中以间隔设置起始值
【发布时间】:2019-07-16 12:29:21
【问题描述】:

我正在尝试创建一个具有起始价值的订阅中心。我无法设置起始值。

现在我有可观察的,它每 30 分钟间隔生成 DateTime.UtcNow。

public async Task Subscribe()
{
    var client = Clients.Client(Context.ConnectionId);
    var subscription = new CompositeDisposable();
    var dateTimeUTCNow = Observable.Interval(TimeSpan.FromMinutes(30))
           .Subscribe(@event => 
           {
               client.SendAsync("newDateTimeUtc", DateTime.UtcNow);
           });

    subscription.Add(dateTimeUTCNow);
    RegisterHandler(subscription, userFound.UserToken);
}

我必须设置起始值 - DateTime.NowUtc

【问题讨论】:

    标签: signalr system.reactive rx.net


    【解决方案1】:

    您在寻找StartWith 运算符吗?

    Observable
        .Interval(TimeSpan.FromMinutes(30))
        .Select(_ => DateTime.UtcNow)
        .StartWith(DateTime.UtcNow)
        ...
    

    【讨论】:

      【解决方案2】:

      您可以使用.Timer(TimeSpan dueTime, TimeSpan period) 重载,而不是Interval 运算符。 如果您将dueTime 设置为TimeSpan.Zero,它将在订阅时发出第一项。

      Observable
          .Timer(TimeSpan.Zero, TimeSpan.FromMinutes(30))
          .Select(_ => DateTime.UtcNow)
          ...
      

      作为gitbox mentioned,您也可以使用 StartWith。但是 StartWith 会给你声明时间而不是订阅时间。如果申报时间和订阅时间一样,当然没有区别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-21
        • 1970-01-01
        • 2018-04-08
        • 1970-01-01
        相关资源
        最近更新 更多