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;
}
Want to help us? Your donation directly helps us maintain and grow ZZZ Free Projects.
We can't thank you enough for your support 🙏.
We all love free and open-source libraries! But there is a catch... nothing is free in this world.
We NEED your help. Last year alone, we spent over 3000 hours maintaining all our open source libraries.
Contributions allow us to spend more of our time on: Bug Fix, Development, Documentation, and Support.
Any amount is much appreciated. All our free libraries together have more than 100 million downloads.
If everyone could contribute a tiny amount, it would help us make the .NET community a better place to code!
Another great free way to contribute is spreading the word about the library.
A HUGE THANKS for your help!
- EntityFramework Extensions
- Dapper Plus
- C# Eval Expression
- and much more!
To view all our free and paid projects, visit our website.