public static async Task<RedisKey[]> GetMinKeysForRangeAsync(
IDatabase database,
string category,
string action,
DateTime start,
DateTime end,
TimeInterval timeInterval = TimeInterval.FifteenMinutes)
{
Tuple<TimeInterval, string, DateTime>[] requiredKeys = DateTimeUtil.MinKeysForRange(start, end, timeInterval);
Task<RedisKey>[] keys = new Task<RedisKey>[requiredKeys.Length];
int keyIndex = 0;
foreach (var tup in requiredKeys)
{
switch (tup.Item1)
{
case TimeInterval.FifteenMinutes:
{
keys[keyIndex] = GetFifteenMinutesAsync(category, action, tup.Item3);
break;
}
case TimeInterval.OneHour:
{
keys[keyIndex] = GetHourAsync(database, category, action, tup.Item3);
break;
}
case TimeInterval.OneDay:
{
keys[keyIndex] = GetDayAsync(database, category, action, tup.Item3);
break;
}
case TimeInterval.Week:
{
keys[keyIndex] = GetWeekAsync(database, category, action, tup.Item3);
break;
}
case TimeInterval.OneMonth:
{
keys[keyIndex] = GetMonthAsync(database, category, action, tup.Item3);
break;
}
case TimeInterval.Quarter:
{
keys[keyIndex] = GetQuarterAsync(database, category, action, tup.Item3);
break;
}
}
keyIndex += 1;
}
return await Task.WhenAll(keys);
}