簡體   English   中英

使用AngularJS的Web API異步方法

[英]Web API async method with AngularJS

AngularJS使用AngularJSMVC 5,我一直在尋找使用AngularJS Web API ,因為它似乎是一個很好的解決方案,可以將數據加載到客戶端模型中。

但是我注意到有不少指南使用返回Task<Model>異步操作,我不明白這會給你帶來什么好處而只使用標准的Web API動作(例如: http://monox.mono-software。 com / blog / post / Mono / 233 / Async-upload-using-angular-file-upload-directive-and-net-WebAPI-service / and http://www.asp.net/web-api/overview/getting -started-with-aspnet-web-api / build-a-single-page-application-%28spa%29-with-aspnet-web-api-and-angularjs )。

由於這些對Web API的調用是異步的,我不知道為什么我們需要使這些方法調用異步。 使用標准的Web API調用不是更好嗎?

我不知道stackoverflow是否適合這個,但我希望能解釋為什么調用這樣做。

async-await在服務器上的好處是可伸縮性和性能。 當您使用異步(非阻塞)替換同步(阻塞)操作時,可以釋放先前阻塞的線程,等待您可以用來同時處理其他請求的線程。

async-await使您可以用更少的資源完成更多工作。

我們假設我們有這種同步方法:

public void Process()
{
    for (int i = 0; i < 1000; i++)
    {
        Math.Sqrt(i);
    }

    Thread.Sleep(3000); // sync I/O
}

通過使其async

public async Task ProcessAsync()
{
    for (int i = 0; i < 1000; i++)
    {
        Math.Sqrt(i);
    }

    await Task.Delay(3000) // async I/O
}

我們可以使用單個線程來處理同一方法的多個請求,因為在await異步操作時會釋放處理請求的線程。

舉一個說明性的例子:

想象一下2個請求,其中一個請求在等待數據庫2秒鍾時被捕獲,另一個請求在應用程序邏輯中被捕獲2秒。

沒有異步,在請求的1秒內,正在使用2個線程。

使用async(一直實現到數據庫調用),在1秒內進入請求,1個線程正在使用,處理應用程序邏輯。 另一個請求處於等待狀態(未使用線程)。

這兩個請求都需要2秒,但在異步方案中,某些請求持續時間內活動線程數會減少

服務器端的異步等待不是啟用/增強異步XMLHttpRequests(AJAX調用)。 如果你選擇實現any,那么啟用await關鍵字和處理在低級框架代碼和服務器端代碼中返回Tasks的方法。 想到這個例子:

底層Web API的控制器調度程序旋轉控制器以響應請求,並告訴它執行操作。 然后需要查看響應並根據結果采取行動(錯誤等)。 如果它同步執行該調度,則調度程序將阻止該線程等待該操作完成,而不必執行該操作。 在異步上下文中,該調度程序可以等待來自控制器的響應,並釋放該線程以運行其他任務。 當原始控制器的操作完成后,任何空閑線程都可以在第一個線程停止的位置拾取並處理其余的調度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM