void IMessageResult.Complete(RedisResult result)
{
if (result.IsCancellation)
{
completion.SetCanceled();
}
else if (result.IsError)
{
completion.SetException(result.Error());
}
else
{
try
{
if (queued == null) throw new InvalidOperationException("Nothing was queued (null)!");
var items = result.ValueItems;
if (items.Length != queued.Length) throw new InvalidOperationException(string.Format("{0} results expected, {1} received", queued.Length, items.Length));
for (int i = 0; i < items.Length; i++)
{
RedisResult reply = items[i];
var ctx = parent.ProcessReply(ref reply, queued[i].InnerMessage);
parent.ProcessCallbacks(ctx, reply);
}
completion.SetResult(true);
}
catch (Exception ex)
{
completion.SetException(ex);
throw;
}
}
}