2016-04-27 4 views
1

Как читать значения из конвейера ServiceStack.Redis? Я видел примеры на GitHub, но я не уверен, что код будет работать правильно, если есть много QueueCommands в одно и то же время (скажем, 10000, например).Прочитать значения из трубопровода ServiceStack.Redis

Обратный вызов QueueCommand, похоже, является асинхронной. Каждый из QueueCommand может иметь обратный вызов. Когда вызывается Pipeline.Flush(), все QueueCommands будут отправлены на Redis Server в режиме Pipeline, и когда один из QueueCommands будет выполнен, будет вызван его обратный вызов.

Мой вопрос: Когда заканчивается Pipeline.Flush(), библиотека гарантирует, что все обратные вызовы выполнены?

Вот код ServiceStack.Redis на GitHub

[Test] 
    public void Can_call_single_operation_with_callback_3_Times_in_pipeline() 
    { 
     var results = new List<long>(); 
     Assert.That(Redis.GetValue(Key), Is.Null); 
     using (var pipeline = Redis.CreatePipeline()) 
     { 
      pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add); 
      pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add); 
      pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add); 
      //Can I assume that when Flush() finishes, 
      //all 3 callbacks (results.Add) would have finished? 
      pipeline.Flush(); 
     } 

     Assert.That(Redis.GetValue(Key), Is.EqualTo("3")); 
     Assert.That(results, Is.EquivalentTo(new List<long> { 1, 2, 3 })); 
    } 

ответ

Смежные вопросы