private async void InitializeUserGrain() { var connectionGrain = GrainClient.GrainFactory.GetGrain <IUserConnectionGrain>(_userId); await connectionGrain.Disconnect(new DisconnectCause { Message = "new connection" }); var observer = await GrainClient.GrainFactory.CreateObjectReference <IUserConnectionObserver>(this); await connectionGrain.Subscribe(observer); bool disposed; lock (_sync) { _userConnectionGrain = connectionGrain; _observer = observer; disposed = _disposed; } if (disposed) { DisposeUserGrain(connectionGrain, observer); } }
public void Dispose() { lock (_sync) { _disposed = true; if (_userConnectionGrain != null) { var grain = _userConnectionGrain; var observer = _observer; _userConnectionGrain = null; _observer = null; DisposeUserGrain(grain, observer); } } }
private async void DisposeUserGrain(IUserConnectionGrain grain, IUserConnectionObserver observer) { await grain.Unsubscribe(observer); await GrainClient.GrainFactory.DeleteObjectReference <IUserConnectionObserver>(observer); }