public RiakResponse<RiakDocument[]> Find(RiakFindRequest request)
{
var connection = _connectionManager.GetNextConnection();
var threads = request.GetInternalRequests()
.Select(r => _threadPool.QueueWorkItem(() => {
connection.WriteWith(r, RequestMethod.Find);
return connection.Read<FindResponse>();
}))
.ToArray();
SmartThreadPool.WaitAll(threads);
var responses = threads.Select(t => t.Result).ToArray();
var badResponses = responses.Where(r => r.ResponseCode == RiakResponseCode.Failed);
return badResponses.Count() == 0
? RiakResponse<RiakDocument[]>.WithoutErrors(responses.Select(x => x.Result.Content.First().ToDocument()).ToArray())
: RiakResponse<RiakDocument[]>.WithWarning(badResponses.Select(x => x.Messages.LastOrDefault()).ToArray(),
responses.Select(x => {
var content = x.Result.Content.FirstOrDefault();
return content == null
? null
: x.Result.Content.FirstOrDefault().ToDocument();
}).ToArray());
}