public static async Task<RedisKey> AndAsync(params Event[] events)
{
var database = SharedCache.Instance.GetAnalyticsWriteConnection().GetDatabase(SharedCache.Instance.Db);
// get the keys for the events (need to group subsets using TemporarilyOrKeys)
var taskKeys = events.Select(
async @event => await TemporarilyOrKeysAsync(database, await @event.RedisKeysAsync())).ToList();
RedisKey[] keys = await Task.WhenAll(taskKeys);
RedisKey tmpKey = TempKey(events);
await BitwiseAnalytics.BitwiseAndAsync(database, tmpKey, keys.ToArray(), TimeSpan.FromHours(1));
return tmpKey;
}