|
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Raven.Client.Document;
namespace Raven.Client.Shard.ShardStrategy.ShardAccess
{
public class ParallelShardAccessStrategy: IShardAccessStrategy
{
public IList<T> Apply<T>(IList<IDocumentSession> shardSessions, Func<IDocumentSession, IList<T>> operation)
{
var returnedLists = new IList<T>[shardSessions.Count];
shardSessions
.Select((shardSession,i) =>
Task.Factory
.StartNew(() => operation(shardSession))
.ContinueWith(task =>
{
returnedLists[i] = task.Result;
})
)
.WaitAll();
return returnedLists
.Where(x => x != null)
.SelectMany(x => x)
.ToArray();
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I've been a software developer since 1996 and have enjoyed C# since 2003. I have a Bachelor's degree in Computer Science and for some reason, a Master's degree in Business Administration. I currently do software development contracting/consulting.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.