首页 > 解决方案 > 等待可观察时出现异常“序列不包含元素”

问题描述

我正在使用System.Reactive.Linq扩展方法将可观察对象转换为异步方法中的结果。当我有对象引用时,代码可以正确运行;但是,当我将 null 传递给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;
    });
}

标签: c#.net-coresystem.reactive

解决方案


这是您的错误被抛出的地方: https ://github.com/dotnet/reactive/blob/master/Rx.NET/Source/src/System.Reactive/Subjects/AsyncSubject.cs#L441

看起来您的主题没有任何观察者,或者观察者已经被处置。


推荐阅读