Я изучаю Rx.NET и в примере кода ниже. Я пытаюсь выполнить событие изменения времени выбора времени асинхронной задачи. OnNext работает отлично, но onError и onComplete этого не делают. Что я делаю не так?Rx.NET не запускает onError или onComplete
private void frmReporting_Load(object sender, EventArgs e){
dtPickerValueChanged = Observable.FromEventPattern(
ev => dtPickerFrom.ValueChanged += ev,
ev => dtPickerFrom.ValueChanged -= ev);
dtPickerValueChanged = dtPickerValueChanged.Merge(Observable.FromEventPattern(
ev => dtPickerTo.ValueChanged += ev,
ev => dtPickerTo.ValueChanged -= ev));
dtPickerValueChanged
.Where(x => dtPickerFrom.Value <= dtPickerTo.Value)
.Finally(() => { tsslStatus.Text = "Finally"; })
.ObserveOn(SynchronizationContext.Current)
.Subscribe(
onNext: async x => {
var result = await Test(dtPickerFrom.Value, dtPickerTo.Value);
MessageBox.Show(result);
},
onError: exception => { MessageBox.Show(exception.Message); },
onCompleted:() => { MessageBox.Show("Finished loading data"); });
}
public Task<string> Test(DateTime start, DateTime end){
return Task.Run(
async() =>
{
await Task.Delay(3000);
return start.ToString("dd/MM/yyyy - HH:mm:ss") + " | " + end.ToString("dd/MM/yyyy - HH:mm:ss");
});
}
Почему вы ожидаете «onError» или «onCompleted» для запуска? Ничто не заканчивает поток событий или бросает ошибки. – Jacob
Если я добавлю новое исключение («что бы там ни было») внутри onNext, он не догонит его onErrror. Что касается onCompleted, как я могу закончить наблюдение, то он не доступен? Я видел много учебников и пример кода, но я никогда не нашел хорошего объяснения, когда вызывается каждое действие. –