这是我第一次使用 async/await 与 Dapper ORM。我不断收到消息说我的 Controller 缺少等待方法。如何在代码中正确插入await方法?
public async Task<ActionResult> index(int? page)
{
if (page == null)
{
page = 1;
ViewBag.page = page;
}
else
{
ViewBag.page = page;
}
string Connectionstring = ConfigurationManager.ConnectionStrings["mycontext"].ConnectionString;
using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(Connectionstring))
{
sqlConnection.Open();
var sqlM = @"SELECT * from threads order by activities desc";
var resultM = sqlConnection.Query<thread>(sqlM).ToList();
await Task.WhenAll(resultM);
return View(new homepage { panel = resultM });
}
}
我尝试过 await Task.WhenAll(resultM);
但它没有改变任何东西。
最佳答案
您收到警告是因为您没有在 Controller 中使用任何异步方法。事实上,没有理由将其标记为 async
.
为了真正使方法异步,您需要使用 Dapper 的异步方法并等待它们。请参阅Using Async Await keywords with Dapper另一个例子。
在您的代码中,它看起来像:
public async Task<ActionResult> index(int? page)
{
if (page == null)
{
page = 1;
ViewBag.page = page;
}
else
{
ViewBag.page = page;
}
string Connectionstring = ConfigurationManager.ConnectionStrings["mycontext"].ConnectionString;
using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(Connectionstring))
{
await sqlConnection.OpenAsync();
var sqlM = @"SELECT * from threads order by activities desc";
var resultM = await sqlConnection.QueryAsync<thread>(sqlM);
return View(new homepage { panel = resultM });
}
}
如果resultM
必须是List<thread>
而不是IEnumerable<T>
,您可以调用ToList
- 但请确保它是在等待异步调用之后。
关于c# - 如何在异步 Controller 中使用 Dapper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36462765/