Tôi đang sử dụng đoạn mã sau để có được một thiết bị đầu cuối và ghi nó vào một bộ nhớ cache:HttpClient không ném ngoại lệ khi sử dụng đang chờ đợi trên GetAsync
public async Task UpdateCacheFromHttp(string Uri)
{
if (string.IsNullOrEmpty(Uri))
return;
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(Uri);
if ((response != null) && (response.IsSuccessStatusCode))
{
var responseStream = await response.Content.ReadAsStreamAsync();
WriteToCache(responseStream);
}
}
Mã này được chạy trên IIS.
Nếu không thể tiếp cận điểm cuối tôi mong đợi GetAsync sẽ ném ngoại lệ. Ngay cả với một Try-Catch, nó không bao giờ có vẻ thất bại. GetAsync không bao giờ trả về (tôi đã thử thời gian chờ 5 giây trên HttpClient, vẫn không trả lại).
này không ném một ngoại lệ:
public Task UpdateCacheFromHttp(string Uri)
{
var updateCacheTask = Task.Factory.StartNew(new Action(() =>
{
if (string.IsNullOrEmpty(Uri))
return;
var httpClient = new HttpClient();
var response = httpClient.GetAsync(Uri).Result;
if (response.IsSuccessStatusCode)
{
var responseStream = response.Content.ReadAsStreamAsync().Result;
WriteToCache(responseStream);
}
}));
return updateCacheTask;
}
tôi nhận được mong đợi "Không thể kết nối đến máy chủ từ xa".
Tôi nghi ngờ nó có liên quan đến mã đang chạy trong IIS, nhưng tại sao? Làm thế nào để tôi có được nó để ném đúng ngoại lệ mà không cần phải bắt đầu một nhiệm vụ mới?
Đó là một trực giác. Cảm ơn. – Askolein
+1, Trực giác của bạn là một điều tuyệt vời. – Valentin