I am using asp.net MVC-5 with EF-6, and I am not sure if using await + ToListAsync
is valid. For example, I have the following repository method which returns an IQueryable :-
public IQueryable<TSet> getAllScanEmailTo()
{
return t.TSets.Where(a=>a.Name.StartsWith("ScanEmail"));
}
And I am calling it as follow:-
var emailsTo = await repository.getAllScanEmailTo().ToListAsync();
In the beginning, I thought I will get an error because I am using "await" a method which is not defined as a task, but the above worked well, so can anyone advice on this, please ?
ToListAsync(IQueryable) Creates a List<T> from an IQueryable by enumerating it asynchronously. ToListAsync(IQueryable, CancellationToken) Creates a List<T> from an IQueryable by enumerating it asynchronously.
2 answers. ToListAsync() is ToList asynchronous. Asynchronous methods can be executed without crashing the application's main thread. Eg in a WinForms application, do not hang the GUI on long operations.
The await operator doesn't block the thread that evaluates the async method. When the await operator suspends the enclosing async method, the control returns to the caller of the method.
The async keyword turns a method into an async method, which allows you to use the await keyword in its body. When the await keyword is applied, it suspends the calling method and yields control back to its caller until the awaited task is complete. await can only be used inside an async method.
At the beginning I thought I will get an error because I am using "await" a method which is not defined as a task, but the above worked well
Actually, you are awaiting a method which returns a Task<T>
, where T
is a List<TSet>
. If you look at the extension method QueryableExtensions.ToListAsync
, you'll see that it returns a Task<List<TSource>>
. You are asynchronously waiting on this method to query the database, create the list and return it back to the caller. When you await
on such a method, the method won't return until the operation has completed. async-await makes your code feel synchronous, while execution is actually asynchronous.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With