web api接口同步和異步的問題


一般來說,如果一個api 接口帶上Task和 async 一般就算得上是異步api接口了。

如果我想使用異步api接口,一般的動機是我在我的方法里面可能使用Task.Run 進行異步的去處理一個耗時的操作。

Q1.如果一個api接口很耗時,比如需要10s,會影響我的前端展示嗎?

   --不會。很多js可以異步請求api接口,當接口返回數據時,通過回調方法,顯示數據。

Q2.對於存在耗時的api接口,使用異步api接口(接口內部可能使用 Task.Run 異步操作)一定可以提高響應嗎?

  --不一定。舉個例子:

   

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的結果對下文的結果輸出並沒有什么影響,這個時候如果使用

     await Task.Run(()=>Job1(s)); 就顯得非常不明智。可以去掉await關鍵字,把Job1放在一個異步的現場中去執行,而程序繼續往下走,避免不必要的等待,對接口加速。

情況2. 更為常見的:Job1的結果是下文所需要的
這種情況下,使用await Task.Run(()=>Job1(s));的意義就不大了。同步和異步有着同樣的效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM