Exemplo n.º 1
0
        protected virtual Task[] PipelineRefreshManyAndOutData(
            string[] keys,
            RedisValue[][] results,
            out byte[][] bytes)
        {
            bytes = new byte[keys.Length][];
            var tasks = new Task[keys.Length];

            for (var i = 0; i < keys.Length; i++)
            {
                if (results[i].Length >= 2)
                {
                    MapMetadata(results[i], out DateTimeOffset? absExpr, out TimeSpan? sldExpr);

                    if (sldExpr.HasValue)
                    {
                        TimeSpan?expr;

                        if (absExpr.HasValue)
                        {
                            var relExpr = absExpr.Value - DateTimeOffset.Now;
                            expr = relExpr <= sldExpr.Value ? relExpr : sldExpr;
                        }
                        else
                        {
                            expr = sldExpr;
                        }

                        tasks[i] = RedisDatabase.KeyExpireAsync(keys[i], expr);
                    }
                    else
                    {
                        tasks[i] = Task.CompletedTask;
                    }
                }

                if (results[i].Length >= 3 && results[i][2].HasValue)
                {
                    bytes[i] = results[i][2];
                }
                else
                {
                    bytes[i] = null;
                }
            }

            return(tasks);
        }