通常來講,若是一個api 接口帶上Task和 async 通常就算得上是異步api接口了。前端
若是我想使用異步api接口,通常的動機是我在個人方法裏面可能使用Task.Run 進行異步的去處理一個耗時的操做。api
Q1.若是一個api接口很耗時,好比須要10s,會影響個人前端展現嗎?異步
--不會。不少js能夠異步請求api接口,當接口返回數據時,經過回調方法,顯示數據。async
Q2.對於存在耗時的api接口,使用異步api接口(接口內部可能使用 Task.Run 異步操做)必定能夠提升響應嗎?this
--不必定。舉個例子:spa
public async Task<IEnumerable<string>> Get(string s)
{
Log.InfoFormat(ITCloudLogType.common, "Begin Request.thread id:{0},time:{1},requestId:{2}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToLongTimeString(), this.ControllerContext.Request.GetCorrelationId().ToString()); await Task.Run(()=>Job1(s)); Log.InfoFormat(ITCloudLogType.common, "End Request.id:{0},time:{1},requestId:{2}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToLongTimeString(), this.ControllerContext.Request.GetCorrelationId().ToString()); return new string[] { "value1", "value2" }; } private void Job1(string s) { return; } private int Job2() { return 2; }
狀況1.假定Job1很是耗時,並且Job1的結果對下文的結果輸出並無什麼影響,這個時候若是使用code
await Task.Run(()=>Job1(s)); 就顯得很是不明智。能夠去掉await關鍵字,把Job1放在一個異步的現場中去執行,而程序繼續往下走,避免沒必要要的等待,對接口加速。
狀況2. 更爲常見的:Job1的結果是下文所須要的。
這種狀況下,使用await Task.Run(()=>Job1(s));的意義就不大了。同步和異步有着一樣的效率。