5
使用的await當我用下面的代碼來獲得一個端點,並將其寫入高速緩存未拋出異常:的HttpClient上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);
}
}
的代碼運行在IIS上。
如果無法到達端點,我希望GetAsync引發異常。即使使用Try-Catch,它似乎永遠不會失敗。 GetAsync永遠不會返回(我嘗試了5秒的HttpClient超時,仍然沒有返回)。
這確實拋出一個異常:
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;
}
我得到預期的「無法連接到遠程服務器」。
我懷疑它與在IIS中運行的代碼有關,但爲什麼?如何在不需要開始新任務的情況下正確拋出異常?
這很直觀。謝謝。 – Askolein 2013-08-22 10:45:22
+1,你的直覺是一件很棒的事情。 – Valentin 2013-12-04 09:25:46