连接可观测值。
Namespace:System.Reactive.Subjects
装配: System.Reactive.dll) 中的 System.Reactive (
语法
'Declaration
Function Connect As IDisposable
'Usage
Dim instance As IConnectableObservable
Dim returnValue As IDisposable
returnValue = instance.Connect()
IDisposable Connect()
IDisposable^ Connect()
abstract Connect : unit -> IDisposable
function Connect() : IDisposable
返回值
类型: System.IDisposable
用于断开可观测对象的 IDisposable 对象。
示例
在以下示例中,我们使用 Publish 运算符将冷可观测序列源转换为热序列源,这将返回名为 hot 的 IConnectableObservable<T> 实例。 Publish 运算符通过向多个订阅者广播单个订阅来提供共享订阅的机制。 hot 充当代理并订阅源,然后在从源接收值时将其推送到自己的订阅者。 为了建立对后备源的订阅并开始接收值,我们使用 IConnectableObservable.Connect () 方法。 由于 IConnectableObservable 继承 IObservable,因此我们可以使用订阅来订阅此热序列,甚至在它开始运行之前。 请注意,在示例中,当 subscription1 订阅热序列时,尚未启动热序列。 因此,不会将任何值推送到订阅服务器。 调用 Connect 后,值随后推送到 subscription1。 延迟 3 秒后,subscription2 订阅热,并立即开始从当前位置接收值 (3,在本例中) ,直到结束。 输出如下所示:
Current Time: 6/1/2011 3:38:49 PM
Current Time after 1st subscription: 6/1/2011 3:38:49 PM
Current Time after Connect: 6/1/2011 3:38:52 PM
Observer 1: OnNext: 0
Observer 1: OnNext: 1
Current Time just before 2nd subscription: 6/1/2011 3:38:55 PM
Observer 1: OnNext: 2
Observer 1: OnNext: 3
Observer 2: OnNext: 3
Observer 1: OnNext: 4
Observer 2: OnNext: 4
Console.WriteLine("Current Time: " + DateTime.Now);
var source = Observable.Interval(TimeSpan.FromSeconds(1)); //creates a sequence
IConnectableObservable<long> hot = Observable.Publish<long>(source); // convert the sequence into a hot sequence
IDisposable subscription1 = hot.Subscribe( // no value is pushed to 1st subscription at this point
x => Console.WriteLine("Observer 1: OnNext: {0}", x),
ex => Console.WriteLine("Observer 1: OnError: {0}", ex.Message),
() => Console.WriteLine("Observer 1: OnCompleted"));
Console.WriteLine("Current Time after 1st subscription: " + DateTime.Now);
Thread.Sleep(3000); //idle for 3 seconds
hot.Connect(); // hot is connected to source and starts pushing value to subscribers
Console.WriteLine("Current Time after Connect: " + DateTime.Now);
Thread.Sleep(3000); //idle for 3 seconds
Console.WriteLine("Current Time just before 2nd subscription: " + DateTime.Now);
IDisposable subscription2 = hot.Subscribe( // value will immediately be pushed to 2nd subscription
x => Console.WriteLine("Observer 2: OnNext: {0}", x),
ex => Console.WriteLine("Observer 2: OnError: {0}", ex.Message),
() => Console.WriteLine("Observer 2: OnCompleted"));
Console.ReadKey();