Exemple #1
0
        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();
            }
        }