// background task that connect members async Task ConnectMembers(MemberConnectionQueue memberConnectionQueue, CancellationToken cancellationToken) { await foreach (var(member, token) in memberConnectionQueue.WithCancellation(cancellationToken)) { await mutex.WaitAsync().CfAwait(); if (!token.IsCancellationRequested) { addresses.Add(member.Address); } mutex.Release(); } }
/// <summary> /// Initializes a new instance of the <see cref="ClusterMembers"/> class. /// </summary> /// <param name="clusterState">The cluster state.</param> /// <param name="terminateConnections">The terminate connections task.</param> public ClusterMembers(ClusterState clusterState, TerminateConnections terminateConnections) { HConsole.Configure(x => x.Configure <ClusterMembers>().SetPrefix("CLUST.MBRS")); _clusterState = clusterState; _terminateConnections = terminateConnections; _loadBalancer = clusterState.Options.LoadBalancer.Service ?? new RandomLoadBalancer(); _logger = _clusterState.LoggerFactory.CreateLogger <ClusterMembers>(); _members = new MemberTable(); // members to connect if (clusterState.IsSmartRouting) { _memberConnectionQueue = new MemberConnectionQueue(clusterState.LoggerFactory); } }