Ejemplo n.º 1
0
        /// <summary>This is the method to opt into Parallel LINQ.</summary>
        /// <typeparam name="TSource">Specifies the type of elements provided to the query.</typeparam>
        /// <param name="source">The source query.</param>
        /// <param name="parallelOptions">The options to use for query processing.</param>
        /// <returns>The source as a ParallelQuery to bind to ParallelEnumerable extension methods.</returns>
        public static ParallelQuery <TSource> AsParallel <TSource>(this IEnumerable <TSource> source, ParallelLinqOptions parallelOptions)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if ((parallelOptions.TaskScheduler != null) && (parallelOptions.TaskScheduler != TaskScheduler.Default))
            {
                throw new ArgumentException("Parallel LINQ only supports the default TaskScheduler.");
            }
            ParallelQuery <TSource> query = source.AsParallel <TSource>();

            if (parallelOptions.Ordered)
            {
                query = query.AsOrdered <TSource>();
            }
            if (parallelOptions.CancellationToken.CanBeCanceled)
            {
                query = query.WithCancellation <TSource>(parallelOptions.CancellationToken);
            }
            if (parallelOptions.MaxDegreeOfParallelism >= 1)
            {
                query = query.WithDegreeOfParallelism <TSource>(parallelOptions.MaxDegreeOfParallelism);
            }
            if (parallelOptions.ExecutionMode != ParallelExecutionMode.Default)
            {
                query = query.WithExecutionMode <TSource>(parallelOptions.ExecutionMode);
            }
            if (parallelOptions.MergeOptions != ParallelMergeOptions.Default)
            {
                query = query.WithMergeOptions <TSource>(parallelOptions.MergeOptions);
            }
            return(query);
        }
Ejemplo n.º 2
0
 public static void Union_SecondOrdered_SourceMultiple(ParallelQuery<int> leftQuery, int leftCount, ParallelQuery<int> rightQuery, int rightCount, int count)
 {
     IntegerRangeSet seenUnordered = new IntegerRangeSet(0, leftCount);
     int seen = leftCount;
     foreach (int i in leftQuery.Union(rightQuery.AsOrdered()))
     {
         if (i >= leftCount)
         {
             Assert.Equal(seen++, i);
         }
         else
         {
             seenUnordered.Add(i);
         }
     }
     Assert.Equal(count, seen);
     seenUnordered.AssertComplete();
 }
Ejemplo n.º 3
0
 public static void Union_SourceMultiple(ParallelQuery<int> leftQuery, int leftCount, ParallelQuery<int> rightQuery, int rightCount, int count)
 {
     int seen = 0;
     Assert.All(leftQuery.AsOrdered().Union(rightQuery.AsOrdered()), x => Assert.Equal(seen++, x));
     Assert.Equal(count, seen);
 }