非同期クエリAsynchronous Queries

非同期クエリでは、クエリは、データベース内で実行中に、スレッドがブロックされないようにします。Asynchronous queries avoid blocking a thread while the query is executed in the database. 固定のシック クライアント アプリケーションの UI を防ぐことができます。This can be useful to avoid freezing the UI of a thick-client application. 非同期操作では、ここで、スレッドを解放して、データベースの操作が完了するまで、他の要求を処理する web アプリケーションでスループットを向上できるもします。Asynchronous operations can also increase throughput in a web application, where the thread can be freed up to service other requests while the database operation completes. 詳細については、次を参照してください。 c# での非同期プログラミングです。For more information, see Asynchronous Programming in C#.

警告

EF コアは、同じコンテキスト インスタンスで実行されている複数の並列操作をサポートしていません。EF Core does not support multiple parallel operations being run on the same context instance. 常に、次の操作を開始する前に完了するための操作を待つ必要があります。You should always wait for an operation to complete before beginning the next operation. 使用してこれは、通常、await各非同期操作ではキーワードです。This is typically done by using the await keyword on each asynchronous operation.

Entity Framework Core では、によって、クエリが実行される LINQ メソッドと返される結果の代わりとして使用できる非同期の拡張メソッドのセットを提供します。Entity Framework Core provides a set of asynchronous extension methods that can be used as an alternative to the LINQ methods that cause a query to be executed and results returned. 例としては、 ToListAsync()ToArrayAsync()SingleAsync(), などです。バージョンがあるいない非同期 LINQ 演算子のようにWhere(...)OrderBy(...)などのみこれらのメソッドは LINQ 式ツリーを構築し、データベースで実行するクエリが発生しないためです。Examples include ToListAsync(), ToArrayAsync(), SingleAsync(), etc. There are not async versions of LINQ operators such as Where(...), OrderBy(...), etc. because these methods only build up the LINQ expression tree and do not cause the query to be executed in the database.

重要

EF コア async 拡張メソッドが定義されている、Microsoft.EntityFrameworkCore名前空間。The EF Core async extension methods are defined in the Microsoft.EntityFrameworkCore namespace. この名前空間は、使用できるメソッドをインポートする必要があります。This namespace must be imported for the methods to be available.

public async Task<List<Blog>> GetBlogsAsync()
{
    using (var context = new BloggingContext())
    {
        return await context.Blogs.ToListAsync();
    }
}