示例#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);
             }
         }
     }));
 }
示例#2
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);
     }));
 }