Ejemplo n.º 1
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()));
        }
Ejemplo n.º 2
0
 static MessageEnumerator()
 {
     _streamFactory = new ChunkedStreamFactory(
         () => new ByteBuffer(System.Buffers.ArrayPool <byte> .Shared.Rent(MESSAGE_BUFFER)),
         chunk => System.Buffers.ArrayPool <byte> .Shared.Return(((ByteBuffer)chunk).SwapBuffer()));
 }