Che*_*tah 3 .net system.reactive
所以我有一个BehaviorSubject<string>我希望用于房产的.我一直在使用阻塞First()方法来获取BehaviorSubject属性getter中保持的当前值.
该First()操作现在已经过时,那么实现这一目标的新方法是什么?
詹姆斯的答案很棒,但我认为值得一提的是First,对于任何IObservable都可以使用.但是Value如果你知道它是一个BehaviorSubject,肯定会使用该属性.
// synchronously wait for the value
var value = someObservable.FirstAsync().Wait();
// async await
var value = await someObservable.FirstAsync();
Run Code Online (Sandbox Code Playgroud)
随着BehaviorSubject<T>你保证*有一个First值始终可用.
但是,IObservable<T>查询运算符通常不能在该假设下工作,因此Obsolete添加了该属性以驱动人们使用异步方法,例如FirstAsync- 帮助他们"陷入成功的陷阱".
由于BehaviorSubject<T>始终具有值集的特殊情况,它具有线程安全Value属性.所以,假设你有这样的东西:
var subject = new BehaviorSubject<string>("Some value");
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
var current = subject.Value;
Run Code Online (Sandbox Code Playgroud)
*尝试在调用BehaviorSubject<T>其Dispose方法后访问实例的值,无论是Value属性还是查询运算符FirstAsync,都会导致ObjectDisposedException抛出.