在开始观察可观察对象的变化之前调用初始请求

时间:2019-07-18 12:27:21

标签: c# signalr observable reactive-programming system.reactive

我有一个(经典的)SignalR集线器,它返回某些值的状态,并带有一个附加的客户端回调协定,该协定将更新发送给客户端。我基本上想在客户端(C#)上创建的是一个可观察的流,该流在第一个观察者连接时调用任务,然后开始进一步侦听回调协定上的更改。

服务器合同(伪):

interface IMyHub
  Task<int> GetInitialInt();

interface IMyHubClient
  void SendFurtherInts(int value);

客户端代理:

 var client = hubConnection.CreateObservableHubProxy<IMyHub, IMyHubClient>();

我现在已经想到了这样的东西:

  public IObservable<int> Value { get; }

  var initialData = Observable.FromAsync(async () => 
    await _client.CallAsync(client => client.GetInitialInt));

  var stream = _client.Observe(client => client.SendFurtherInts)
    .StartWith(initialData)
    .Publish()
    .RefCount(1);

  stream.Connect();
  Value = stream.AsObservable();

StartWith()但是希望枚举现有值,而不是单个值或流。 .Prepend()似乎也不适用于流。从技术上讲,我可以先调用该任务,然后创建流,但这既没有功能,也不能满足我的需求(当第一个观察者连接时调用)。

解决这个问题的正确方法是什么?

0 个答案:

没有答案
相关问题