簡體   English   中英

Thread.Start(WebRequest.GetResponse)與WebRequest.BeginGetResponse

[英]Thread.Start(WebRequest.GetResponse) vs. WebRequest.BeginGetResponse

我要下載文件,同時在UI上顯示下載正在進行中。 使用WebRequest我有兩個選擇:

  1. 使用WebRequest.BeginGetResponse和相關方法。

    優點:可以顯示精確的進度(以字節為單位)。

    缺點:要編寫更多代碼。 由於同步和異步方法不混合使用,因此我需要使用BeginGetResponseBeginReadBeginGetRequestStream 需要手動執行的更多操作,包括讀取緩沖區,超時。

  2. 啟動新線程(或使用線程池),使用WebRequest.GetResponse和相關方法。

    優點:沒有不必要的代碼。

    缺點:無法顯示確切的進度。

由於要下載的文件很小,因此以字節為單位顯示進度是有利的,但不是至關重要的。 如果我使用從功能角度和性能角度考慮的第二種方法,我會錯過某些東西嗎?

還是我錯過了一個更高層次的,被廣泛使用的包裝器? WebClient不會公開WebRequest的屬性,因此對我來說是不可用的,因為我需要使用cookie等。)

如果創建新線程(選項2),則該線程將在執行請求時阻塞。 如果一次只發出一個請求沒什么大不了,但是如果您發出許多請求,那么最終可能會有很多額外的線程。 每個線程將花費您大約1MB的RAM。

諸如WebRequest.BeginGetResponse類的異步調用不會在請求處理過程中阻塞您的任何線程,它只會在您的請求完成以交付結果時從線程池中選擇一個線程。

暫無
暫無

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

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