/// <summary> /// Cache for <see cref="GrpcCopyClient"/>. /// </summary> public GrpcCopyClientCache(Context context, GrpcCopyClientCacheConfiguration?configuration = null, IClock?clock = null) { configuration ??= new GrpcCopyClientCacheConfiguration(); _configuration = configuration; _grpcCopyClientBufferPool = new ByteArrayPool(configuration.GrpcCopyClientConfiguration.ClientBufferSizeBytes); switch (_configuration.ResourcePoolVersion) { case GrpcCopyClientCacheConfiguration.PoolVersion.Disabled: break; case GrpcCopyClientCacheConfiguration.PoolVersion.V1: _resourcePool = new ResourcePool <GrpcCopyClientKey, GrpcCopyClient>( context, _configuration.ResourcePoolConfiguration, (key) => new GrpcCopyClient(key, _configuration.GrpcCopyClientConfiguration, sharedBufferPool: _grpcCopyClientBufferPool), clock); break; case GrpcCopyClientCacheConfiguration.PoolVersion.V2: _resourcePoolV2 = new ResourcePoolV2 <GrpcCopyClientKey, GrpcCopyClient>( context, _configuration.ResourcePoolConfiguration, (key) => new GrpcCopyClient(key, _configuration.GrpcCopyClientConfiguration, sharedBufferPool: _grpcCopyClientBufferPool), clock); break; } }
private static async Task RunTest <TKey, TObject>(Func <OperationContext, ResourcePoolV2 <TKey, TObject>, Task> func, Func <TKey, TObject> factory, ResourcePoolConfiguration?configuration = null, IClock?clock = null) where TKey : notnull where TObject : IStartupShutdownSlim { configuration ??= new ResourcePoolConfiguration(); var tracingContext = new Context(TestGlobal.Logger); var context = new OperationContext(tracingContext); var pool = new ResourcePoolV2 <TKey, TObject>(tracingContext, configuration, factory, clock); try { await func(context, pool); } finally { pool.Dispose(); ValidateCounters(pool.Counter); } }