Deferred execution in parallel LINQ in .NET C#
August 17, 2016 1 Comment
If you are familiar with LINQ then you are probably aware of the notion of deferred execution: queries are not carried out until they are needed. This is not different in parallel LINQ either. Let’s see an example:
Set up a data source:
int[] integerArray = new int[100]; for (int i = 0; i < integerArray.Length; i++) { integerArray[i] = i; }
Define a parallel query:
IEnumerable<double> results = integerArray.AsParallel().Select(item => { return Math.Sqrt(item); });
The query has not been carried out at this point. It is carried out when the following foreach loop starts:
double sum = 0; foreach (double result in results) { sum += result; } Console.WriteLine("Total {0}", sum);
You can force query execution with the same extension methods as in “normal” LINQ, such as ToList, ToArray etc.:
IEnumerable<double> results = integerArray.AsParallel().Select(item => { return Math.Sqrt(item); }).ToList();
In this case the query is executed as soon as it has been defined.
View the list of posts on the Task Parallel Library here.
Nice post. How deferred execution can be helpful. Please give some example. Thanks a lot