public void ReleaseReference() { lock (usageLock) { if (--references == 0) { if (shuttingDown) { Dispose(); } RemoteBuildEngineManager.ReleaseProjectBuilder(engine).Ignore(); } } }
async void Dispose(bool releaseProjectBuilder = false) { if (!MSBuildProjectService.ShutDown && engine != null) { var currentEngine = engine; Task.Run(async() => { try { // Run this outside the usageLock to avoid a deadlock with RemoteBuildEngine's remoteProjectBuilders lock. await currentEngine.UnloadProject(this, projectId).ConfigureAwait(false); } catch { // Ignore } if (releaseProjectBuilder) { await RemoteBuildEngineManager.ReleaseProjectBuilder(currentEngine); } }).Ignore(); GC.SuppressFinalize(this); engine = null; } }