This library is powered by Entity Framework Extensions
LINQ-Async allows you to chain async task and orders async predicate with fluent API.
- LINQ Async Extensions
- LINQ Async Precicate Extensions
- OrderByPredicateCompletion
- StartPredicateConcurrently
- LINQ Async Task Extensions
- LINQ Async Enumerable Task Extensions
- OrderByCompletion
- SelectResult
PM> Install-Package Z.Linq.Async
You want to use LINQ methods asynchronously.
All LINQ extension 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;
}
You want to resolve a predicate asynchronously and start all predicates concurrently and/or order them by completion.
All LINQ extension methods and overloads using a predicate are 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;
}
You want to chain LINQ methods with Task<IEnumerable<T>>.
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;
}
You want to use LINQ methods with enumerable tasks and order them by completion.
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;
}
The best way to contribute is by spreading the word about the library:
- Blog it
- Comment it
- Star it
- Share it
A HUGE THANKS for your help.
- Projects:
- Learn Websites
- Online Tools:
- and much more!
To view all our free and paid projects, visit our website ZZZ Projects.