Я использую методы расширения System.Reactive.Linq
для преобразования наблюдаемого в результат в асинхронном методе. Код работает правильно, когда у меня есть ссылка на объект; однако, когда я передаю ноль в метод OnNext
, получаемый в результате ожидающий результат выдает
System.InvalidOperationException
HResult=0x80131509
Message=Sequence contains no elements.
Source=System.Reactive
StackTrace:
at System.Reactive.Subjects.AsyncSubject`1.GetResult() in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\AsyncSubject.cs:line 441
at <namespace>.DataServiceTests.<GetWithInvalidIdShouldReturnNull>d__5.MoveNext() in <local test code>
Я ожидаю, что ожидающий получит нулевое значение. Мой тест выглядит следующим образом:
[Fact]
public async void GetWithInvalidIdShouldReturnNull()
{
var testId = shortid.ShortId.Generate();
var result = await myTestOjbect.GetById(testId);
Assert.Null(result);
}
И метод GetById
:
public IObservable<object> GetById(string id)
{
return Observable.Create((IObserver<object> observer) => {
var item = this._repository.Get(id); // This returns null when id is not found in collection
observer.OnNext(item);
observer.OnCompleted();
return Disposable.Empty;
});
}