Tôi có một httpclient như thế này:Tại sao cuộc gọi HttpClient.PostAsync đầu tiên cực kỳ chậm trong ứng dụng C# winforms của tôi?
var client = new HttpClient();
tôi đăng lên lớp học như thế này:
var result = client.PostAsync(
endpointUri,
requestContent);
Và nhận được phản ứng như thế này:
HttpResponseMessage response = result.Result;
Tôi hiểu cuộc gọi này sẽ chặn các chủ đề, thats làm thế nào nó phải làm việc (chỉ cần xây dựng một công cụ cho bản thân mình, không có chủ đề không đồng bộ cần thiết)
Lần đầu tiên tôi thực hiện cuộc gọi này, mất khoảng 2 phút để nhận kết quả. Trong khi đó, nếu tôi thực hiện cuộc gọi chính xác ở nơi khác, nó được thực hiện trong 200ms. Ngay cả khi tôi nhấn google, nó mất 2 phút. Nhưng, sau cuộc gọi đầu tiên, miễn là tôi tiếp tục mở ứng dụng, mọi cuộc gọi bổ sung đều tốt. Nó chỉ là cal đầu tiên khi tôi mở ứng dụng. Điều gì có thể gây ra điều này?
Tôi sẽ bắt đầu bằng cách sử dụng '.ContinueWith' thay vì' .Result' (sử dụng 'async/await' ...) - ngoài việc này tôi không thấy gì cả có thể gây ra sự chậm trễ đó và thành thật mà nói tôi nghi ngờ rằng vấn đề nằm ở một nơi khác – Carsten
Điều này sẽ dễ dàng nếu chúng tôi có một ngăn xếp để xem xét. Sử dụng WebClient mới(). Tải xuốngString() cho mục đích thử nghiệm, tạm dừng trình gỡ lỗi trong khi tạm dừng và đăng ngăn xếp cuộc gọi bao gồm cả mã bên ngoài. Nó có thể nói điều gì đó về DNS hoặc proxy. – usr
Tôi không thể đoán được nhưng tôi sẽ bắt đầu bằng cách loại trừ khả năng thực hiện nó đồng bộ là vấn đề. HttpClient được thiết kế để không đồng bộ và có những cảnh báo mạnh mẽ về việc sử dụng nó theo kiểu bị chặn. 'kết quả chờ đợi 'chỉ đơn giản là' result.Result' vậy tại sao lại chống lại việc sử dụng nó một cách chính xác? –