0
我想實現異步端點(.NET C#)以便用javascript/ajax調用它們。基本思想是在多個線程中拆分請求(同時> 2),以便用戶從每個調用中分別得到響應,並且每個請求的執行時間與實際的計算(或等待)時間相對應。Javascript同時調用異步端點
public async Task<ActionResult> Call1()
{
var client = new HttpClient();
var res = await client.GetAsync("http://httpbin.org/delay/3"); // Takes 3 seconds
return View("~/Views/Dashboard/Test.cshtml");
}
public async Task<ActionResult> Call2()
{
var client = new HttpClient();
var res = await client.GetAsync("http://httpbin.org/delay/2"); // Takes 2 seconds
return View("~/Views/Dashboard/Test.cshtml");
}
我們假設瀏覽器同時請求方法Call1和Call2。現在,直到兩個呼叫終止(Call1(3秒)+ Call2(2秒))大約需要5秒。據我所知,這意味着.NET處理它們是同步的,並在處理Call2之前等待Call1結束,儘管它們在同一時間被異步方法調用。這不是我想要的。
我想要實現與多個方法相同的結果顯示在下面的方法,該方法正確地只需要3秒,儘管這兩個服務(3秒+ 2秒)被稱爲:
public async Task<ActionResult> Delay()
{
var client1 = new HttpClient();
Task<HttpResponseMessage> async1 = client1.GetAsync("http://httpbin.org/delay/3");
var client2 = new HttpClient();
Task<HttpResponseMessage> async2 = client2.GetAsync("http://httpbin.org/delay/2");
HttpResponseMessage result1 = await async1;
HttpResponseMessage result2 = await async2;
return View("~/Views/Dashboard/Test.cshtml");
}
是否可以不阻止其他線程並同時處理多個方法?
謝謝你的幫助。 vill
「據我瞭解,這意味着.NET處理它們同步,並等待處理CALL1前CALL2結束,雖然他們在同一時間與異步叫方法「不認爲這是正確的 –
[如何編寫C#Parallel.ForEach循環](https://msdn.microsoft.com/en-us/library/dd460720(v = vs.110).aspx) – user5226582
@ user5226582:無法使用Parallel-Class,因爲我需要用多種方法分隔邏輯。 – vill