1 回答

TA貢獻1799條經驗 獲得超8個贊
從我的理解上來看,使用 async Task<ActionResult>去在Controller中實現異步action,目的是為了在高耗時的action操作中,可以暫時把線程池讓出來給別的請求,一般網上能找到的文章都是在async action中,await SqlCommand.ExecuteNonQuery,這樣就可以達到異步的處理目的。
我的問題是,如果我使用.net中自帶的,ExecuteNonQueryAsync,這個方法其實已經在內部實現了異步訪問數據庫的操作,應用程序中只需要處理其返回結果就可以了-----那這樣的話,我還有必要使用異步action嗎?
從我自己的猜測來說,應該是不需要,因為在ExecuteNonQueryAsync的過程中,上下文已經在其內部實現中被掛起,線程池已經將此線程讓出給別的請求,即達到了使用異步的目的。
那么,在只考慮數據庫為高耗時操作的情況下,mvc的異步操作可以分為兩種實現:
1. 異步Action + await 同步方法訪問數據庫
public async Task<ActionResult> Practice()
{
......
SqlCommand command = new SqlCommand ();
......
await command .ExecuteNonQuery();
......
}
2. 同步Action + 數據庫訪問Async
public ActionResult Practice()
{
......
SqlCommand command = new SqlCommand ();
......
command .ExecuteNonQueryAsync();
- 1 回答
- 0 關注
- 74 瀏覽
添加回答
舉報