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