我有一个BehaviorSubject<string>
,我希望用它作为一个属性。我一直在使用阻塞的First()
方法来获取BehaviorSubject
在属性getter中保存的当前值。
First()
操作现在已经过时了,那么有什么新方法可以实现这个功能呢?
我有一个BehaviorSubject<string>
,我希望用它作为一个属性。我一直在使用阻塞的First()
方法来获取BehaviorSubject
在属性getter中保存的当前值。
First()
操作现在已经过时了,那么有什么新方法可以实现这个功能呢?
詹姆斯的回答很好,但我认为值得提及的是适用于任何IObservable的一般替代方案,但如果您知道它是BehaviorSubject,请绝对使用Value属性。
// synchronously wait for the value
var value = someObservable.FirstAsync().Wait();
// async await
var value = await someObservable.FirstAsync();
IObservable
,但从技术上讲,其他回答更适用于这个问题,所以我点赞了这个回答,并将另一个回答标记为正确。 - CheetahBehaviorSubject<T>
,您可以保证始终有一个First
值可用*。IObservable<T>
查询运算符不能在这种假设下工作,因此添加了Obsolete
属性,以引导人们使用异步方法,如FirstAsync
- 帮助他们“成功地跌入陷阱”。BehaviorSubject<T>
始终具有设置的值的特殊情况,它具有线程安全的Value
属性。因此,假设您有类似以下内容的内容:var subject = new BehaviorSubject<string>("Some value");
var current = subject.Value;
*当尝试访问 BehaviorSubject<T>
实例的值时,若其已被调用 Dispose
方法(不论是通过 Value
属性还是查询运算符如 FirstAsync
),都会导致抛出 ObjectDisposedException
异常。