如何使用间隔在 Observable 中设置起始值

How to set starting value in Observable with intervals

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

现在我有了每 30 分钟生成 DateTime.UtcNow 的 observable。

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

您在寻找 StartWith 运算符吗?

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

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

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

作为你也可以使用StartWith。但是 StartWith 会给你声明时间而不是订阅时间。如果申报时间和认购时间相同,当然没有区别。