[英]Thread.Start(WebRequest.GetResponse) vs. WebRequest.BeginGetResponse
我要下載文件,同時在UI上顯示下載正在進行中。 使用WebRequest
我有兩個選擇:
使用WebRequest.BeginGetResponse
和相關方法。
優點:可以顯示精確的進度(以字節為單位)。
缺點:要編寫更多代碼。 由於同步和異步方法不混合使用,因此我需要使用BeginGetResponse
, BeginRead
和BeginGetRequestStream
。 需要手動執行的更多操作,包括讀取緩沖區,超時。
啟動新線程(或使用線程池),使用WebRequest.GetResponse
和相關方法。
優點:沒有不必要的代碼。
缺點:無法顯示確切的進度。
由於要下載的文件很小,因此以字節為單位顯示進度是有利的,但不是至關重要的。 如果我使用從功能角度和性能角度考慮的第二種方法,我會錯過某些東西嗎?
還是我錯過了一個更高層次的,被廣泛使用的包裝器? ( WebClient
不會公開WebRequest
的屬性,因此對我來說是不可用的,因為我需要使用cookie等。)
如果創建新線程(選項2),則該線程將在執行請求時阻塞。 如果一次只發出一個請求沒什么大不了,但是如果您發出許多請求,那么最終可能會有很多額外的線程。 每個線程將花費您大約1MB的RAM。
諸如WebRequest.BeginGetResponse
類的異步調用不會在請求處理過程中阻塞您的任何線程,它只會在您的請求完成以交付結果時從線程池中選擇一個線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.