Observable.FromEventPattern -- не вызывает OnCompleted
От: Аноним  
Дата: 29.01.12 11:14
Оценка:
Код:

class Program
    {
        public event EventHandler MyEvent;

        static void Main(string[] args)
        {
            new Program().Work();

            Console.ReadLine();
        }

        private void Work()
        {
            var observable = Observable.FromEventPattern(h => MyEvent += h, h => MyEvent -= h);

            observable.Subscribe(
                r => Console.WriteLine("onNext"),
                x => Console.WriteLine(x.Message),
                () => Console.WriteLine("onCompleted"));

            MyEvent(this, null);
        }
    }


Событие наступает, а onCompleted на экран не выводится. Почему? Ведь это нарушает цепочку вызовов (нельзя сделать Aggregate и пр.). Как исправить?
Re: Observable.FromEventPattern -- не вызывает OnCompleted
От: Jack128  
Дата: 29.01.12 11:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Код:


А>Событие наступает, а onCompleted на экран не выводится. Почему? Ведь это нарушает цепочку вызовов (нельзя сделать Aggregate и пр.). Как исправить?


а когда по твоему должен наступать oncompleted ?? после первого срабатывания события?? после второго?? после сотого???
Re: Observable.FromEventPattern -- не вызывает OnCompleted
От: JohnnyJ Германия  
Дата: 29.01.12 11:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Событие наступает, а onCompleted на экран не выводится. Почему?


Потому что такова логика работы IObservable, который создается вызовом FromEventPattern — по наступлению события кинуть OnNext.
OnCompleted и OnError никогда не произойдут, как и отписка от события, кстати. Если немного подумать, то это логично

А>Ведь это нарушает цепочку вызовов (нельзя сделать Aggregate и пр.). Как исправить?


Если нужно прервать цепочку по первому же событию, то Take(1) поможет:

var observable = Observable.FromEventPattern(h => MyEvent += h, h => MyEvent -= h).Take(1);
Зри в корень!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.