使用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;
    }

但是我可以看到一個警告:異步方法las'等待'運算符並將同步運行。如何將此函數重寫為異步?

一般承認的答案

您可以使用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”附加到具有Async或async修飾符的方法的名稱。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因