web-dev-qa-db-ja.com

DapperでAwait Awaitキーワードを使用する

マイクロオームを使用したいので、Dapperを使用することにしました。

しかし、新しいasync/await構文をサポートしているという言及は見当たらないようです。非同期クエリは私にとって重要です。

誰かがawaitキーワードを使用してDapperで作成された非同期クエリのコード例を提供できますか?

32
Yaron Levi

.NET 4.5を対象とするDapperは、* Async-QueryAsyncなどで終わるメソッドを介してTPLの使用を完全にサポートしています。具体的には、.NET 4.5ビルドには この追加のメソッドセット

44
Marc Gravell

これがヤロンのサンプルです

 public async Task<List<Artist>> GetAllAsync()
    {
        using (
            SqlConnection conn =
                new SqlConnection(Conn.String))
        {
            await conn.OpenAsync();

            using (var multi = await conn.QueryMultipleAsync(StoredProcs.Artists.GetAll, commandType: CommandType.StoredProcedure))
            {
                var Artists = multi.Read<Artist, AlbumArtist, Artist>((artist, albumArtist) =>
                {
                    artist.albumArtist = albumArtist;
                    return artist;
                }).ToList();

                var albums = multi.Read<Album, AlbumArtist, Album>(
                (album, albumArtist, album) =>
                {
                    album.albumArtist = album;
                    return albums;
                }).ToList();


                conn.Close();

                return Artists;
            }
        }
    }
33
Salman Syed

下記は用例です。

Dapperの例-非同期呼び出し

ただし、これは待ちきれません:

var results = await Connection.QueryAsync<T>(sql).Result.ToArray();

次のようなものを書く必要があります。

var results = await Connection.QueryAsync<T>(sql);
return results.ToArray();
0
Gregor Jovan