Scalien.ConfigStateHelpers.ParallelFetchValuesHTTP C# (CSharp) Method

ParallelFetchValuesHTTP() public static method

public static ParallelFetchValuesHTTP ( List shardServers, System.Int64 tableID, byte key ) : List
shardServers List
tableID System.Int64
key byte
return List
        public static List<byte[]> ParallelFetchValuesHTTP(List<ConfigState.ShardServer> shardServers, Int64 tableID, byte[] key)
        {
            var threads = new GetterThreadState[shardServers.Count];
            var doneEvents = new ManualResetEvent[shardServers.Count];
            var serverKeys = new List<byte[]>();

            var i = 0;
            foreach (var shardServer in shardServers)
            {
                var url = Utils.HTTP.BuildUri(GetShardServerURL(shardServer),
                            "raw/get?tableID=" + tableID,
                            "&key=", key);

                doneEvents[i] = new ManualResetEvent(false);

                threads[i] = new GetterThreadState();
                threads[i].shardServer = shardServer;
                threads[i].url = url;
                threads[i].doneEvent = doneEvents[i];
                ThreadPool.QueueUserWorkItem(threads[i].GetterThreadFunc, null);

                i += 1;
            }

            WaitHandle.WaitAll(doneEvents);

            foreach (var thread in threads)
            {
                serverKeys.Add(thread.value);
            }

            return serverKeys;
        }