Exemple #1
0
 public DistributedCacheClientPool(DistributedCacheClientOptions options, IEqualityComparer <Tk> comparer, Action <int, Exception> catch_client_exception = null, ICache <Tk, T> cache = null)
 {
     _options       = options;
     _cache         = cache ?? new InternalCache <Tk, T>(3, comparer);
     _flushingCache = cache == null;
     _comparer      = comparer;
     _catch         = catch_client_exception;
     _pool          = null;
     _cancel        = null;
 }
Exemple #2
0
        /// <summary>
        /// Клиент распределенного кеша
        /// </summary>
        /// <param name="options">Настройки работы клиента</param>
        /// <param name="comparer">Функция сравнения ключей</param>
        /// <param name="cache">Внешний кеш. Если не задат то будет использоваться свой внутренний кеш, уникальный на каждый экземпляр этого класса. При заданном значении сторонний код берет на себя переодический вызов ICache.TryFlush</param>
        public DistributedCacheClient(DistributedCacheClientOptions options, IEqualityComparer <Tk> comparer, ICache <Tk, T> cache = null)
        {
            _batchInterval = options.BatchInterval;
            _batchBlock    = new BatchBlock <Tk>(options.BatchSize, new GroupingDataflowBlockOptions()
            {
                BoundedCapacity = options.MaxRequestedMessagesCount
            });

            _cache  = new ClientCache <Tk, T>(_batchBlock, options.RepeatRequestInterval, comparer, cache);
            _client = null;

            _streamFactory = new ChunkedStreamFactory(
                () => new ByteBuffer(System.Buffers.ArrayPool <byte> .Shared.Rent(MESSAGE_BUFFER)),
                chunk => System.Buffers.ArrayPool <byte> .Shared.Return(((ByteBuffer)chunk).SwapBuffer()));
        }