所以我有一个BehaviorSubject<string>
我希望用于一个属性。我一直在使用阻止First()
方法来获取BehaviorSubject
在属性获取器中保存的当前值。
First()
操作现已过时,那么实现此目的的新方法是什么?
答案 0 :(得分:9)
詹姆斯的答案很棒,但我认为值得一提的是适用于任何IObservable的First
的一般替代品。但是如果你知道它是一个BehaviorSubject,那么一定要使用Value
属性。
// synchronously wait for the value
var value = someObservable.FirstAsync().Wait();
// async await
var value = await someObservable.FirstAsync();
答案 1 :(得分:6)
使用BehaviorSubject<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
被抛出。