c# - 等待可观察时出现异常“序列不包含元素”
问题描述
我正在使用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;
});
}
解决方案
这是您的错误被抛出的地方: https ://github.com/dotnet/reactive/blob/master/Rx.NET/Source/src/System.Reactive/Subjects/AsyncSubject.cs#L441
看起来您的主题没有任何观察者,或者观察者已经被处置。
推荐阅读
- c - 将二维数组传递为单个指针并访问数组的每个单元格
- angularjs - 如何处理使用 agularjs 构建并使用 S3 + Cloudfront 托管的 SPA 的任何 URL 的页面刷新请求?
- java - 当集群中有两个节点时,Jboss EAP 7.1.6 故障转移不起作用
- angular - 如何以角度下载文件,该文件作为 application/octet-stream 接收
- ruby-on-rails - 动作控制器:刷新页面时出现异常
- php - 同一个表中的同名数据如何添加它的数量并插入另一个表?
- sql - 获取用于聚合数据的“Null”值
- android - 是否可以在 Android 上显示彩色 html 富文本通知?
- python-asyncio - Aiohttp 服务器最大连接数
- reactjs - 我得到了预期的赋值或函数调用,而是看到了一个表达式 no-unused-expressions