我期待更好地瞭解異步編程模型。讓我們假設在下面稱爲Web服務需要1秒鐘,返回:異步編程模型和應用程序規模
async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
string urlContents = await client.GetStringAsync("http://service.com");
return urlContents.Length;
}
它是正確的說,當await
與異步方法使用當前線程產生回線程池的其他工作?是否使用異步模型爲每個請求節省了1秒的工作時間,因爲該線程並未等待Web服務響應?
定義'節省1秒的工作'。每個請求都是一秒鐘嗎?多線程永遠不會保存你的工作。同樣的工作總是要進行。但是,它可以節省您的時間。 – Gusdor
一般來說,這意味着線程可以用於其他工作。異步'GetStringAsync'方法使用異步I/O回調,所以它甚至不需要使用新線程。換句話說,在一個I/O綁定的應用程序中,擁有更多的線程根本沒有幫助。異步調用'AccessTheWebAsync' 100次將意味着它將花費大約1秒鐘的時間,而不是在一個線程中同步完成100秒。 – Luaan
@Gusdor通過儲蓄,我的意思是一個線程不會花費一些時間而不做有用的工作,因爲它正在等待某些事情做出迴應。 –