簡體   English   中英

如何從動作創建 Observable<t> ?</t>

[英]How do I create an Observable from an Action<T>?

我正在嘗試從 Action 創建 Observable,但FromEventPatternFromEvent語法對我來說很難理解。

這是我的嘗試:

Observable
    .FromEventPattern<Action<IStreamTrade>, IStreamTrade>(
        x => _polygonSocket.TradeReceived += x,
        x => _polygonSocket.TradeReceived -= x)
    .Select(x => x?.EventArgs)
    .IsNotNull()
    .Subscribe( /** do stuff **/)
    .DisposeWith(Bindings);

我覺得FromEventPattern在這里可能不是正確的選擇,但我無法編譯其他任何東西。

怎么了:

我收到Parameter count mismatch. 異常,如下所示:

Parameter count mismatch.
Thread started:  #26
  at System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method, System.Boolean throwOnBindFailure, System.Boolean allowClosed) [0x000ee] in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/external/mono/mcs/class/corlib/System/Delegate.cs:230 
  at System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method) [0x00000] in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/external/mono/mcs/class/corlib/System/Delegate.cs:296 
  at System.Reactive.ReflectionUtils.CreateDelegate[TDelegate] (System.Object o, System.Reflection.MethodInfo method) [0x00000] in <370f6a6bb34048878534065376a195cb>:0 
  at System.Reactive.Linq.ObservableImpl.FromEventPattern+Impl`2[TDelegate,TEventArgs].GetHandler (System.Action`1[T] onNext) [0x0003d] in <370f6a6bb34048878534065376a195cb>:0 
  at System.Reactive.Linq.ObservableImpl.EventProducer`2+Session[TDelegate,TArgs].Initialize () [0x00023] in <370f6a6bb34048878534065376a195cb>:0 
  at System.Reactive.Linq.ObservableImpl.EventProducer`2+Session[TDelegate,TArgs].Connect (System.IObserver`1[T] observer) [0x00033] in <370f6a6bb34048878534065376a195cb>:0 

我在找什么:

我想了解如何從Action<IStreamTrade>創建 Observable。 我對使用Observable.Create的解決方案持開放態度,但如果可能的話,我更喜歡使用FromEventFromEventPattern的解決方案。

一些附加信息:

下面是如何定義動作:

public event Action<IStreamTrade> TradeReceived;

GitHub 源碼

以下是他們在示例代碼中使用它的方式:

sockClient.OnTradeUpdate += HandleTradeUpdate;

// later ...

private void HandleTradeUpdate(ITradeUpdate trade)
{
// removed irrelevant code
}

GitHub 源碼

嘗試使用Observable.FromEvent ,它將基於 Action 的通用 .NET 事件轉換為可觀察序列:

Observable.FromEvent<IStreamTrade>(
    x => _polygonSocket.TradeReceived += x,
    x => _polygonSocket.TradeReceived -= x)
.Subscribe( /** do stuff **/)
.DisposeWith(Bindings);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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