in rocketmq-client-csharp/PublishLoadBalancer.cs [88:114]
public List<rmq::MessageQueue> Select(int maxAttemptTimes)
{
List<rmq::MessageQueue> result = new List<rmq::MessageQueue>();
List<rmq::MessageQueue> all = this._messageQueues;
if (0 == all.Count)
{
return result;
}
int start = ++_roundRobinIndex;
int found = 0;
for (int i = 0; i < all.Count; i++)
{
int idx = ((start + i) & int.MaxValue) % all.Count;
if (Accept(result, all[idx]))
{
result.Add(all[idx]);
if (++found >= maxAttemptTimes)
{
break;
}
}
}
return result;
}