LINQ selectを使用して非同期タスクを返す

.net-core asp.net-core c# entity-framework-core linq

質問

私は非同期的にデータベースから子項目のリストを返す関数を実装したい。だから私は関数を書く:

    public async Task<IEnumerable<object>> GetFiles(int parentId)
    {
        var data = from file in DB.Files
                   where file.ParentId == parentId
                   select new { name = file.Name, id = file.Id };
        return data;
    }

しかし、私は警告を見ることができます:非同期メソッドはオペレータを待っていると同期して実行されます。この関数を非同期に書き換える方法は?

受け入れられた回答

ToListAsync()を使用できます。

https://msdn.microsoft.com/en-us/library/dn220258(v=vs.113).aspx

var data = await DB.Files
    .Where(file => file.ParentId == parentId)
    .Select
        (
            new 
            { 
                name = file.Name,
                id = file.Id 
            }
        ).ToListAsync();
return data;

あるいは:

var data = from file in DB.Files
           where file.ParentId == parentId
           select new { name = file.Name, id = file.Id };
return await data.ToListAsync();

これによりデータが照会されることに注意してください。また、メソッド名を再考することもできます。メソッドが非同期である場合、 命名規則は、メソッド名に "Async"を追加することを推奨します。

通常、非同期または非同期の修飾子を持つメソッドの名前に "Async"を追加します。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ