Код:
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 и пр.). Как исправить?
Здравствуйте, Аноним, Вы писали:
А>Событие наступает, а onCompleted на экран не выводится. Почему?
Потому что такова логика работы IObservable, который создается вызовом FromEventPattern — по наступлению события кинуть OnNext.
OnCompleted и OnError никогда не произойдут, как и отписка от события, кстати. Если немного подумать, то это логично
А>Ведь это нарушает цепочку вызовов (нельзя сделать Aggregate и пр.). Как исправить?
Если нужно прервать цепочку по первому же событию, то Take(1) поможет:
var observable = Observable.FromEventPattern(h => MyEvent += h, h => MyEvent -= h).Take(1);