簡體   English   中英

如何在異步控制器中使用Dapper?

[英]How do I use Dapper in an asynchronous controller?

這是我第一次在Dapper ORM中使用async / await。 我不斷收到消息,說我的控制器缺少await方法。 如何在我的代碼中正確插入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); 但它並沒有改變任何東西。

之所以收到警告,是因為您未在控制器中使用任何異步方法。 實際上,沒有理由將其標記為async

為了實際使方法異步,您需要使用Dapper的異步方法並等待它們。 有關此示例的其他信息,請參見將Dashboard和Async 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))
    {
        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但請確保它等待異步調用之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM