示例#1
0
 public async Task ConnectToNewBrokerAsync(CancellationToken cancellationToken)
 {
     using (_session._disposeToken.Link(ref cancellationToken)) {
         var connectionInfo = new HostConnectionInfo(_session.Name, _session, _session._startupInfo.UseRHostCommandLineArguments);
         _hostToSwitch = await _session.BrokerClient.ConnectAsync(connectionInfo, cancellationToken);
     }
 }
示例#2
0
        private static async Task TestBrokerConnectionWithRHost(IBrokerClient brokerClient, CancellationToken cancellationToken)
        {
            var callbacks      = new NullRCallbacks();
            var connectionInfo = new HostConnectionInfo(nameof(TestBrokerConnectionAsync), callbacks, useRHostCommandLineArguments: true);
            var rhost          = await brokerClient.ConnectAsync(connectionInfo, cancellationToken);

            try {
                var rhostRunTask = rhost.Run(cancellationToken);
                callbacks.SetReadConsoleInput("q()\n");
                await rhostRunTask;
            } finally {
                rhost.Dispose();
            }
        }
示例#3
0
        private async Task StartHostAsyncBackground(RHostStartupInfo startupInfo, IRSessionCallback callback, int timeout, CancellationToken cancellationToken)
        {
            TaskUtilities.AssertIsOnBackgroundThread();

            _callback    = callback;
            _startupInfo = startupInfo ?? new RHostStartupInfo();
            RHost host;

            try {
                var connectionInfo = new HostConnectionInfo(Name, this, _startupInfo.UseRHostCommandLineArguments, timeout);
                host = await BrokerClient.ConnectAsync(connectionInfo, cancellationToken);
            } catch (OperationCanceledException ex) {
                _hostStartedTcs.TrySetCanceled(ex);
                throw;
            } catch (Exception ex) {
                _hostStartedTcs.TrySetException(ex);
                throw;
            }

            await StartHostAsyncBackground(host, cancellationToken);
        }
示例#4
0
        public async Task ReconnectAsync(CancellationToken cancellationToken)
        {
            using (_disposeToken.Link(ref cancellationToken)) {
                var host = _host;
                // host may be null if previous attempts to start it have failed
                if (host != null)
                {
                    // Detach RHost from RSession
                    host.DetachCallback();

                    // Cancel all current requests (if any)
                    await CancelAllAsync(cancellationToken);

                    host.Dispose();
                    await _hostRunTask;
                }

                var connectionInfo = new HostConnectionInfo(Name, this, _startupInfo.UseRHostCommandLineArguments);
                host = await BrokerClient.ConnectAsync(connectionInfo, cancellationToken);

                await StartHostAsyncBackground(host, cancellationToken);
            }
        }