private async Task Orphan(ScriptHost instance, bool forceStop = false) { lock (_liveInstances) { bool removed = _liveInstances.Remove(instance); if (!forceStop && !removed) { return; // somebody else is handling it } } try { // this thread now owns the instance if (instance.TraceWriter != null) { instance.TraceWriter.Info("Stopping Host"); } await instance.StopAsync(); } finally { instance.Dispose(); } }