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); } }
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(); } }
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); }
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); } }