2016-04-27 7 views
1

Wie Werte aus ServiceStack.Redis Pipeline gelesen werden? Ich sah Beispiele auf GitHub, aber ich bin nicht sicher, dass der Code richtig funktioniert, wenn es viele QueueCommands zur gleichen Zeit gibt (Sagen wir zum Beispiel 10000).Werte aus ServiceStack.Redis Pipeline lesen

Der Rückruf von QueueCommand scheint eine asynchrone Operation zu sein. Jeder der QueueCommand kann einen Rückruf haben. Wenn Pipeline.Flush() aufgerufen wird, werden alle QueueCommands im Pipeline-Modus an Redis Server gesendet, und wenn einer der QueueCommands ausgeführt wird, wird sein Callback aufgerufen.

Meine Frage ist: Wenn Pipeline.Flush() beendet, garantiert die Bibliothek, dass alle Rückrufe ausgeführt werden? Hier

ist der Code ServiceStack.Redis auf 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 })); 
    } 

Antwort