2015-07-08 17 views
5

Từ đây answer cho câu hỏi: Do HttpClient and HttpClientHandler have to be disposed?, tôi thấy thực tiễn tốt nhất là không phải để xử lý yêu cầu HTTP theo yêu cầu System.Net.Http.HttpClient. Đặc biệt, nó được tuyên bố rằng:Do Windows.Web.Http.HttpClient phải được xử lý theo yêu cầu HTTP?

việc sử dụng tiêu chuẩn của HttpClient không được thải bỏ nó sau mỗi yêu cầu.

Và điều đó vẫn ổn.

Câu hỏi của tôi là, "mẫu" này cũng áp dụng cho Windows.Web.Http.HttpClient không? Hoặc nó có nên được xử lý theo yêu cầu HTTP không? Tôi nghĩ rằng documentation là một chút mơ hồ về điều này. Trong một trong các mẫu, nó chỉ đơn giản là tiểu bang:

// Once your app is done using the HttpClient object call dispose to 
// free up system resources (the underlying socket and memory used for the object) 
httpclient.Dispose(); 

Tôi tin rằng điều này có thể được đọc cả hai cách, vì vậy bất kỳ đầu vào cụ thể về điều này được đánh giá cao.

+1

Hãy suy nghĩ về điều đó trong một giây - điểm * của loại này sẽ là gì nếu bạn chỉ nên sử dụng nó cho một chu kỳ yêu cầu/phản hồi? Trong hoàn cảnh như vậy, tại sao họ không chỉ cho bạn một phương tiện để trực tiếp xây dựng một số hình thức đối tượng yêu cầu? –

+0

Nếu bạn vứt bỏ nó "theo yêu cầu", bạn bị giới hạn trong một yêu cầu. Câu hỏi thực sự là: Liệu HttpClient.Dispose làm bất cứ điều gì có ý nghĩa? – usr

Trả lời

4

Dường như với tôi rằng nếu nó được dự định chỉ được sử dụng cho một yêu cầu tại một thời điểm, nó sẽ chỉ đơn giản là ném một ngoại lệ nếu bạn cố gắng sử dụng nó cho nhiều hơn một.

Ngoài ra, hãy xem xét rằng tất cả, nhưng phiên bản đầu tiên của HTTP cho phép nhiều yêu cầu cho một kết nối TCP nhất định. Sử dụng cùng một đối tượng HttpClient cho phép khuôn khổ duy trì kết nối TCP cho nhiều yêu cầu.

Trong khi đó là sự thật rằng mã mẫu thực hiện chỉ là một yêu cầu, lưu ý văn bản này trong the documentation:

Các HttpClient lớp dụ hoạt động như một phiên để gửi yêu cầu HTTP và nhận câu trả lời. Một cá thể HttpClient là tập hợp các cài đặt áp dụng cho tất cả các yêu cầu được thực hiện bởi cá thể đó. Ngoài ra, mỗi cá thể HttpClient đều sử dụng pool kết nối của riêng nó & hellip;

[nhấn mạnh của tôi]

Đối với các đối tượng hoạt động như "một tập hợp các thiết lập mà áp dụng cho tất cả các yêu cầu được thực hiện bởi đó dụ", đó là hiển nhiên nó sẽ phải được sử dụng cho nhiều yêu cầu .

Các vấn đề liên quan