У меня есть класс, который предоставляет следующую наблюдаемую последовательность:
internal IObservable<TaskDoneEventArgs> WhenTaskDone => Observable
.FromEventPattern<TaskDoneEventHandler, TaskDoneEventArgs>(
handler => NiTask.Done += handler,
handler => NiTask.Done -= handler)
.Select(x => x.EventArgs);
Я хотел бы выполнить некоторую асинхронную логику TPL всякий раз, когда из последовательности наблюдается новый элемент.Насколько я понимаю, SelectMany()
- хороший способ справиться с асинхронной логикой.Тем не менее у меня возникают проблемы с правильным синтаксисом.
Моя попытка сделать следующее, но она не будет компилироваться:
_output.WhenTaskDone
.SelectMany(async _ => await StopDelivery())
.Subscribe(_ => Debug.WriteLine("Delivery stopped"));
Я получаю следующую ошибку, связанную с SelectMany()
:
Error CS0411: The type arguments for method 'Observable.SelectMany<TSource, TOther>(IObservable<TSource>, IObservable<TOther>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. (85, 18)
Подпись функции StopDelivery()
выглядит следующим образом:
internal Task StopDelivery()
Что я здесь упускаю и что делаю не так?