public void Disable() { lock (_gate) { if (_instanceTask == null) { // already disabled return; } var instanceTask = _instanceTask; _instanceTask = null; RemoveGlobalAssets(); _shutdownCancellationTokenSource.Cancel(); _checksumUpdater.Shutdown(); _checksumUpdater = null; try { instanceTask.Wait(_shutdownCancellationTokenSource.Token); // result can be null if service hub failed to launch instanceTask.Result?.Shutdown(); } catch (OperationCanceledException) { // _instance wasn't finished running yet. } } }
public void Disable() { RemoteHostClient client = null; lock (_gate) { if (_remoteClientTask == null) { // already disabled return; } var remoteClientTask = _remoteClientTask; _remoteClientTask = null; RemoveGlobalAssets(); _shutdownCancellationTokenSource.Cancel(); _checksumUpdater.Shutdown(); _checksumUpdater = null; try { remoteClientTask.Wait(_shutdownCancellationTokenSource.Token); // result can be null if service hub failed to launch client = remoteClientTask.Result; } catch (OperationCanceledException) { // remoteClientTask wasn't finished running yet. } } if (client != null) { client.StatusChanged -= OnStatusChanged; // shut it down outside of lock so that // we don't call into different component while // holding onto a lock client.Shutdown(); } }
public void Enable() { lock (_gate) { if (_remoteClientTask != null) { // already enabled return; } // We enable the remote host if either RemoteHostTest or RemoteHost are on. if (!_workspace.Options.GetOption(RemoteHostOptions.RemoteHostTest) && !_workspace.Options.GetOption(RemoteHostOptions.RemoteHost)) { // not turned on return; } // log that remote host is enabled Logger.Log(FunctionId.RemoteHostClientService_Enabled, KeyValueLogMessage.NoProperty); var remoteHostClientFactory = _workspace.Services.GetService <IRemoteHostClientFactory>(); if (remoteHostClientFactory == null) { // dev14 doesn't have remote host client factory return; } // set bitness SetRemoteHostBitness(); // make sure we run it on background thread _shutdownCancellationTokenSource = new CancellationTokenSource(); var token = _shutdownCancellationTokenSource.Token; // create solution checksum updater _checksumUpdater = new SolutionChecksumUpdater(this, token); _remoteClientTask = Task.Run(() => EnableAsync(token), token); } }