Example #1
0
 public override Task <TValue> AdapterCallAsync <TValue>(CommandPacket cmd, Func <RedisResult, TValue> parse)
 {
     return(TopOwner.LogCallAsync(cmd, async() =>
     {
         var asyncRds = _asyncManager.GetAsyncRedisSocket(cmd);
         try
         {
             var rt = await asyncRds.WriteAsync(cmd);
             return parse(rt);
         }
         catch (ProtocolViolationException)
         {
             var pool = (asyncRds._rds as DefaultRedisSocket.TempProxyRedisSocket)?._pool;
             cmd._protocolErrorTryCount++;
             if (pool != null && cmd._protocolErrorTryCount <= pool._policy._connectionStringBuilder.Retry)
             {
                 return await AdapterCallAsync(cmd, parse);
             }
             else
             {
                 if (cmd.IsReadOnlyCommand() == false || cmd._protocolErrorTryCount > 1)
                 {
                     throw;
                 }
                 return await AdapterCallAsync(cmd, parse);
             }
         }
     }));
 }
Example #2
0
            async public override Task <TValue> AdapterCallAsync <TValue>(CommandPacket cmd, Func <RedisResult, TValue> parse)
            {
                var poolkey = GetIdleBusKey(cmd);
                var pool    = _ib.Get(poolkey);

                if (pool.AsyncSocket == null)
                {
                    return(AdapterCall(cmd, parse));
                }
                return(await TopOwner.LogCallAsync(cmd, async() =>
                {
                    RedisResult rt = null;
                    Exception ioex = null;
                    try
                    {
                        rt = await pool.AsyncSocket.WriteAsync(cmd);
                    }
                    catch (Exception ex)
                    {
                        ioex = ex;
                    }
                    if (ioex != null)
                    {
                        if (pool?.SetUnavailable(ioex) == true)
                        {
                        }
                        throw ioex;
                    }
                    rt.IsErrorThrow = TopOwner._isThrowRedisSimpleError;
                    return parse(rt);
                }));
            }
Example #3
0
 public override Task <TValue> AdapterCallAsync <TValue>(CommandPacket cmd, Func <RedisResult, TValue> parse)
 {
     return(TopOwner.LogCallAsync(cmd, async() =>
     {
         var asyncRds = _asyncManager.GetAsyncRedisSocket(cmd);
         var rt = await asyncRds.WriteAsync(cmd);
         return parse(rt);
     }));
 }