public async Task <IServer> SelectServerAsync(IServerSelector selector, CancellationToken cancellationToken) { ThrowIfDisposedOrNotOpen(); Ensure.IsNotNull(selector, nameof(selector)); using (var helper = new SelectServerHelper(this, selector)) { try { while (true) { var server = helper.SelectServer(); if (server != null) { return(server); } helper.WaitingForDescriptionToChange(); await WaitForDescriptionChangedAsync(helper.Selector, helper.Description, helper.DescriptionChangedTask, helper.TimeoutRemaining, cancellationToken).ConfigureAwait(false); } } catch (Exception ex) { helper.HandleException(ex); throw; } } }
public async Task<IServer> SelectServerAsync(IServerSelector selector, CancellationToken cancellationToken) { ThrowIfDisposedOrNotOpen(); Ensure.IsNotNull(selector, nameof(selector)); using (var helper = new SelectServerHelper(this, selector)) { try { while (true) { var server = helper.SelectServer(); if (server != null) { return server; } helper.WaitingForDescriptionToChange(); await WaitForDescriptionChangedAsync(helper.Selector, helper.Description, helper.DescriptionChangedTask, helper.TimeoutRemaining, cancellationToken).ConfigureAwait(false); } } catch (Exception ex) { helper.HandleException(ex); throw; } } }