public async Task EvaluateAsync(string rScript) { VariableSubscription subscription = null; // One eval at a time await _sem.WaitAsync(); try { _mre.Reset(); _globalEnv = null; subscription = _variableProvider.Subscribe(0, "base::environment()", OnGlobalEnvironmentEvaluated); using (var evaluation = await base.Session.BeginEvaluationAsync()) { await evaluation.EvaluateAsync(rScript); } if (System.Diagnostics.Debugger.IsAttached) { _mre.Wait(); } else { if (!_mre.Wait(TimeSpan.FromSeconds(10))) { throw new TimeoutException("Evaluate time out"); } } } finally { _variableProvider.Unsubscribe(subscription); _sem.Release(); } }