public async Task <TokenInfo> GetTokenInfoAsync(Guid tokenInfoId, CancellationToken cancellationToken = default) { if (tokenInfoId == default) { throw new ArgumentNullException(nameof(tokenInfoId)); } await using var redis = await _redisClientsManager.GetClientAsync(cancellationToken); return(await redis.As <TokenInfo>().GetByIdAsync(tokenInfoId, cancellationToken) ?? throw new TokenInfoNotFoundException($"TokenInfoId = {tokenInfoId}")); }
public ICacheClient CreateClient() { var client = _manager.GetClient(); var clientAsync = _managerAsync.GetClientAsync().Result; return(new RedisClient(client, clientAsync)); }
public async Task Does_block_ReadWrite_clients_pool() { await using IRedisClientsManagerAsync manager = CreateAndStartManager(); var delay = TimeSpan.FromSeconds(1); var client1 = await manager.GetClientAsync(); var client2 = await manager.GetClientAsync(); var client3 = await manager.GetClientAsync(); var client4 = await manager.GetClientAsync(); #pragma warning disable IDE0039 // Use local function Action func = async delegate #pragma warning restore IDE0039 // Use local function { await Task.Delay(delay + TimeSpan.FromSeconds(0.5)); await client4.DisposeAsync(); }; #if NETCORE _ = Task.Run(func); #else func.BeginInvoke(null, null); #endif var start = DateTime.Now; var client5 = await manager.GetClientAsync(); Assert.That(DateTime.Now - start, Is.GreaterThanOrEqualTo(delay)); AssertClientHasHost(client1, testReadWriteHosts[0]); AssertClientHasHost(client2, testReadWriteHosts[1]); AssertClientHasHost(client3, testReadWriteHosts[2]); AssertClientHasHost(client4, testReadWriteHosts[3]); AssertClientHasHost(client5, testReadWriteHosts[3]); }