私がやりたいことの宣言は次のようになります。
// Checks input source for timeouts, based on the number of elements received
// from clock since the last one received from source.
// The two selectors are used to generate output elements.
public static IObservable<R> TimeoutDetector<T1,T2,R>(
this IObservable<T1> source,
IObservable<T2> clock,
int countForTimeout,
Func<R> timedOutSelector,
Func<T1, R> okSelector)
アスキーではマーブル ダイアグラムは難しいですが、次のようになります。
source --o---o--o-o----o-------------------o---
clock ----x---x---x---x---x---x---x---x---x---
output --^---^--^-^----^-----------!-------^---
組み合わせて使用できる方法で既存のObservable
関数を探してみましたが、ほとんどの組み合わせ関数は、「それぞれの 1 つ」( 、 )を受け取ることに依存しているか、「前の」値を1 つ「不足」している ( )、または必要なものから離れすぎている ( 、、、、) 。近いように見えますが、ソース スループットをクロック レートに制限したくありません。source
clock
And
Zip
CombineLatest
Amb
GroupJoin
Join
Merge
SelectMany
Timeout
Sample
だから今、私はここで大きなギャップを埋めようとして立ち往生しています:
return new AnonymousObservable<R>(observer =>
{
//One observer, two observables??
});
申し訳ありませんが、「何を試しましたか」セクションはここでは少し不十分です: 私がそれについて考えてみたとしましょう! 完全な実装を求めているわけではありません。
- 私が見逃したのに役立つ組み込み関数はありますか?
- 2 つのオブザーバブルをサブスクライブするラムダベースのオブザーバーを構築するにはどうすればよいですか?