3

大量のイベントから満たされた監視可能なコレクションがあります。EventArg から情報を取得し、名前でグループ化し、各名前の最大日付を選択します。私はこれを試しました:

_subscription = Observable
            .FromEventPattern<NewLoanEventHandler, NewLoanEventArgs>(
                h => loan.NewLoanEvent += h, 
                h => loan.NewLoanEvent -= h)
            .Select(a => a.EventArgs.Counterpatry)
            .GroupBy(c => c.Name)
            .SelectMany(grp => grp.Max( c => c.MaturityDate ).Select( maturity => new {grp.Key, maturity}) )
            .Subscribe( 
                i => Console.WriteLine("{0} --> {1}", i.Key, i.maturity),
                Console.WriteLine,
                () => Console.WriteLine("completed")
                );

私はそれが私が望むことをするかもしれないと思いますが、サブスクリプションは決して完了しません.完全なメッセージを取得することはなく、出力も得られません. それは、Observable がまださらなるイベントを待っているからだと思います。待機を停止して出力を返すように指示するにはどうすればよいですか?

4

1 に答える 1

5

サービスからの応答を 1 つだけ待っている場合は、クエリ式で .Take(1) または .FirstAsync() を使用することを検討してください。

_subscription = Observable
            .FromEventPattern<NewLoanEventHandler, NewLoanEventArgs>(
                h => loan.NewLoanEvent += h, 
                h => loan.NewLoanEvent -= h)
            .Take(1)
            .Select(a => a.EventArgs.Counterpatry)
            .GroupBy(c => c.Name)
            .SelectMany(grp => grp.Max( c => c.MaturityDate ).Select( maturity => new {grp.Key, maturity}) )
            .Subscribe( 
                i => Console.WriteLine("{0} --> {1}", i.Key, i.maturity),
                Console.WriteLine,
                () => Console.WriteLine("completed")
                );
于 2013-07-29T13:54:00.000 に答える