var allkeys = sourcecon.BasicRetryInfo((conn) => conn.GetServer(conn.GetEndPoints()[0]).Keys(dbindex).Skip(skipKeys).Take(takeKeys)).ToArray();
var sourcedb = sourcecon.GetConection().GetDatabase(dbindex);
var destdb = destcon.GetConection().GetDatabase(dbindex);
foreach (var keys in SplitKeys(allkeys))
{
var rbatch = sourcedb.CreateBatch();
var ttltask = new List>();
var dumptask = new Listbyte[]?>>();
foreach (var key in keys)
{
ttltask.Add(rbatch.KeyTimeToLiveAsync(key));
dumptask.Add(rbatch.KeyDumpAsync(key));
}
rbatch.Execute();
var ttlResults = Task.WhenAll(ttltask).Result;
var dumpkResults = Task.WhenAll(dumptask).Result;
//Restore the key to destation DB.var destBatch = destdb.CreateBatch();
var i = 0;
foreach (var key in keys)
{
destBatch.KeyRestoreAsync(key, dumpkResults[i], ttlResults[i]);
i++;
}
destBatch.Execute();
//Random select one key to verify in Phase 3. if (keys.Count() > 0)
{
int index = RandomNumberGenerator.GetInt32(keys.Count());
verifiedKeys.Add((dbindex, keys.ElementAt(index).ToString()));
}
lock (lockObject)
{
totalKeysCopied += keys.Count();
}
}