我正在研究 Rx.NET,在下面的示例代码中,我试图执行一个异步任务,观察日期时间选择器值更改事件。onNext 运行完美,但 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");
});
}