C# LINQ Async extension methods library for async/await task.
C#
Switch branches/tags
Nothing to show
Clone or download
Latest commit abb3946 Jun 20, 2017
Permalink
Failed to load latest commit information.
src Fix AllAsync method Mar 12, 2017
.gitattributes Create .gitattributes Dec 19, 2015
.gitignore Create .gitignore Dec 19, 2015
LICENSE Update LICENSE Feb 9, 2016
README.md Update README.md Jun 20, 2017

README.md

Chain async task and order async predicate with fluent API.

Features

Download

download

PM> Install-Package Z.Linq.Async

Stay updated with latest changes

Twitter Follow Facebook Like

LINQ Async Extensions

Problem

You want to use LINQ methods asynchronously.

Solution

All LINQ extensions methods and overloads are supported. You can easily create any asynchronous task.

// Using Z.Linq

public Task<IEnumerable<Customer>> MyAsyncMethod(CancellationToken cancellationToken)
{
    List<Customer> customers = DB.GetCustomers();
    var task = list.WhereAsync(c => /* long predicate */, cancellationToken);

    // ... synchronous code ...
    
    return task;
}

LINQ Async Predicate Extensions

Problem

You want to resolve a predicate asynchronously and start all predicates concurrently and/or order them by completion.

Solution

All LINQ extensions methods and overloads using a predicate is supported. You can easily use an asynchronously predicate and choose how the predicate will be resolved:

  • OrderByPredicateCompletion(bool)
  • StatePredicateConcurrently(bool)

Support:

  • Deferred
    • SkipWhile
    • Where
  • Immediate
    • All
    • Any
    • Count
    • First
    • FirstOrDefault
    • LongCount
    • Single
    • SingleOrDefault
// Using Z.Linq

// Change global default value
LinqAsyncManager.DefautlValue.OrderByPredicateCompletion = false;
LinqAsyncManager.DefaultValue.StartPredicateConcurrently = false;

public Task<IEnumerable<Customer>> MyAsyncTaskMethod(CancellationToken cancellationToken)
{
    List<Customer> customers = DB.GetCustomers();
    
    // GET all customers by predicate completion
    var task = list.WhereAsync(c => MyAsyncPredicate(DB.IsCustomerActiveAsync(c)))
                   .OrderByPredicateCompletion();

    // ... synchronous code ...
    
    return task;
}

Learn more

LINQ Async Task Extensions

Problem

You want to chain LINQ methods with Task<IEnumerable<T>>.

Solution

All LINQ extensions methods and overloads are supported, you can easily chain multiples LINQ methods before awaiting your final task.

Support:

  • Array
  • Enumerable
  • List

Other types must use "AsEnumerable()" method to allow to chain LINQ methods.

// Using Z.Linq

public async Task<List<Customer>> MyAsyncTaskMethod(CancellationToken cancellationToken)
{
    // GET the five first customers which the predicate has completed
    var task = list.WhereAsync(c => MyAsyncPredicate(DB.IsCustomerActiveAsync(c)))
                         .OrderByPredicateCompletion()
                         .Take(5)
                         .ToList();


    // ... synchronous code ...
    
    return task;
}

Learn more

LINQ Async Enumerable Task Extensions

Problem

You want to use LINQ methods with enumerable task and order them by completion.

Solution

Support:

  • OrderByCompletion
  • SelectResult
// Using Z.Linq

public async Task<List<Customer>> MyAsyncTaskMethod(CancellationToken cancellationToken)
{
    // GET customer from concurrent web service
    IEnumerable<Task<List<Customer>>> task =  WebService.GetCustomers();
    
    // GET the customer list from the first web service completed
    var taskFirstCompleted = task.SelectResultByCompletion()
                                 .SelectResult()
								 .First()
								 
                   
    // GET the five first customers which the predicate has completed
    var task = taskFirstCompleted.WhereAsync(c => MyAsyncPredicate(DB.IsCustomerActiveAsync(c)))
                                 .OrderByPredicateCompletion()
                                 .Take(5)
                                 .ToList();
    
    // ... synchronous code ...
    
    return task;
}

Learn more

Contribute

The best way to contribute is by spreading the word about the library:

  • Blog it
  • Comment it
  • Fork it
  • Star it
  • Share it

A HUGE THANKS for your help.

More Projects

Entity Framework

Bulk Operations

Expression Evaluator

Utilities

Need more info? info@zzzprojects.com

Contact our outstanding customer support for any request. We usually answer within the next business day, hour, or minutes!