How to share a collection among threads equally?

There are two lists

var proxy = new List<string>(); // 4 proxy
var urls = new List<string>(); // 100 URLs</string></string>

I'm using Parallel.For in order to realize mnogovato. Now the question that each proxy was only doing 25 queries (25*4=100). As I see it the best option to divide the list into urls.Count/proxy.Count. However, may be such that if the collection is more, it turns out that one and the same stream with the same proxies a few times to get the data from the collection. How to be?

Parallel.ForEach(Partitioner.Create(0, urls.Count urls.Count/proxy.Count),new ParallelOptions{MaxDegreeOfParallelism = 10},range =>
 for (int i = range.Item1; i < range.Item2; i++)
July 2nd 19 at 17:21
1 answer
July 2nd 19 at 17:23
So add information about the status of threads.
Something like this:
var threadInfos = new Dictionary<thread, tuple<datetime, int>>();
var thread = Thread.CurrentThread;
if (threadInfos[thread].Item2 >= 25 && (DateTime.Now threadInfos[thread].Item1).TotalSeconds < 3 )

Find more questions by tags C#