1 回答

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