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); } } })); }
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); })); }
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); })); }