public static async Task <SessionWithSolution> CreateAsync(RemoteHostClient.Connection connection, Solution solution, CancellationToken cancellationToken) { Contract.ThrowIfNull(connection); Contract.ThrowIfNull(solution); PinnedRemotableDataScope scope = null; try { scope = await solution.GetPinnedScopeAsync(cancellationToken).ConfigureAwait(false); // set connection state for this session. // we might remove this in future. see https://github.com/dotnet/roslyn/issues/24836 await connection.InvokeAsync( WellKnownServiceHubServices.ServiceHubServiceBase_Initialize, new object[] { scope.SolutionInfo }, cancellationToken).ConfigureAwait(false); return(new SessionWithSolution(connection, scope)); } catch { // make sure disposable objects are disposed when // exceptions are thrown connection.Dispose(); scope?.Dispose(); // we only expect this to happen on cancellation. otherwise, rethrow cancellationToken.ThrowIfCancellationRequested(); throw; } }
public void Dispose() { if (_disposed) { return; } _disposed = true; OnDisposed(); PinnedScopeOpt?.Dispose(); }
public static async Task <SessionWithSolution> CreateAsync(RemoteHostClient.Connection connection, Solution solution, CancellationToken cancellationToken) { Contract.ThrowIfNull(connection); Contract.ThrowIfNull(solution); PinnedRemotableDataScope?scope = null; try { var service = solution.Workspace.Services.GetRequiredService <IRemotableDataService>(); scope = await service.CreatePinnedRemotableDataScopeAsync(solution, cancellationToken).ConfigureAwait(false); // set connection state for this session. // we might remove this in future. see https://github.com/dotnet/roslyn/issues/24836 await connection.InvokeAsync( WellKnownServiceHubServices.ServiceHubServiceBase_Initialize, new object[] { scope.SolutionInfo }, cancellationToken).ConfigureAwait(false); return(new SessionWithSolution(connection, scope)); } catch { // Make sure disposable objects are disposed when exceptions are thrown. The try/finally is used to // ensure 'scope' is disposed even if an exception is thrown while disposing 'connection'. try { connection.Dispose(); } finally { scope?.Dispose(); } // we only expect this to happen on cancellation. otherwise, rethrow cancellationToken.ThrowIfCancellationRequested(); throw; } }
public void Dispose() { _scope.Dispose(); _connection.Dispose(); }
public void Dispose() { _scope.Dispose(); KeepAliveSession.Dispose(); }