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); }
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; }