CSharp - Parallel LINQ AsParallel


AsParallel operator converts data sequence into a ParallelQuery.

You are likely to use the AsParallel method every time you use PLINQ.


The AsParallel method has two prototypes that we will cover.

public static ParallelQuery<T> AsParallel<T>(
    this IEnumerable<T> source

This prototype operates on an IEnumerable<T> and returns a ParallelQuery<T>, which can be used as the basis for a PLINQ query.

The Second AsParallel Prototype

public static ParallelQuery AsParallel(
          this IEnumerable source

The second prototype creates a ParallelQuery from an IEnumerable and exists to support legacy collections, such as System.Collections.ArrayList.

The ParallelQuery is not strongly typed and cannot be used as the basis for a PLINQ query without being converted to a ParallelQuery<T>.

You can cast a ParallelQuery to a ParallelQuery<T> by using the Cast<T> operator or filter the sequence to get the items that are instances of T by using the OfType<T> operator.


using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

class Program/* w  ww  .  j a  v a2 s .  c om*/
    static void Main(string[] args)
          string[] codeNames = {"Python", "Java", "Javascript", "Bash", "C++", "Oracle"};
          ParallelQuery<string> pq = codeNames.AsParallel();
          IEnumerable<string> results = from p in pq
                    where p.Contains('o')
                    select p;
          foreach (string president in results) {
              Console.WriteLine("Match: {0}", president);


Related Topics