Async
Starts execution of IQueryable on a ThreadPool thread and returns immediately with a "end" method to call once the result is needed.
Source
public static Func<TResult> Async<T, TResult>(this IEnumerable<T> enumerable, Func<IEnumerable<T>, TResult> asyncSelector)
{
System.Diagnostics.Debug.Assert(!(enumerable is ICollection), "Async does not work on arrays/lists/collections, only on true enumerables/queryables.");
// Create delegate to exec async
Func<IEnumerable<T>, TResult> work = (e => asyncSelector(e));
// Launch it
IAsyncResult r = work.BeginInvoke(enumerable, null, null);
// Return method that will block until completed and rethrow exceptions if any
return () => work.EndInvoke(r);
}
Example
// Define some expensive query
IQueryable<string> myExpensiveQuery = context.SystemLog.Where(l => l.Timestamp >= DateTime.Today.AddDays(-10));
// Start async processing
Func<string[]> waitForQueryData = myExpensiveQuery.Async(e => e.ToArray());
// Do a lot of other work, e.g. other queries
// Need my query result now, so block until it's ready and get result
string[] myQueryResults = waitForQueryData();
Author: ulrikb.worldpress.com
Submitted on: 14 okt. 2010
Language: C#
Type: System.Collections.Generic.IEnumerable<T>
Views: 7613