【发布时间】:2022-01-12 08:08:44
【问题描述】:
我正在使用System.Reactive,但我不知道该选择哪一个:EventHandlers 或 Subjects。它们有什么区别?
var client = WebSocketClient.Create(uri);
// Subject
client.OnConnected
.Subscribe(_ => { Log.Information($"Socket {client.Id} connected"); })
.DisposeWith(disposable);
// EventHandler
Observable
.FromEventPattern(h => client.Connected += h, h => client.Connected -= h)
.Select(_ => Unit.Default)
.Subscribe(_ => { Log.Information($"Socket {client.Id} connected"); })
.DisposeWith(disposable);
public class WebSocketClient : IWebSocketClient
{
// Subject
private readonly ISubject<Unit> _connectedSubject = new Subject<Unit>();
public IObservable<Unit> OnConnected => _connectedSubject.AsObservable();
// EventHandler
private EventHandler? _connected;
public event EventHandler Connected
{
add => _connected += value;
remove => _connected -= value;
}
// Logic
async Task IWebSocketClient.ConnectAsync(CancellationToken cancellationToken)
{
...
await _webSocket.ConnectAsync(_uri, cancellationToken).ConfigureAwait(false);
_connected?.Invoke(this, EventArgs.Empty);
_connectedSubject.OnNext();
...
}
private void Dispose()
{
_connectedSubject.OnCompleted();
}
}
【问题讨论】:
标签: c# .net-core system.reactive