mbu*_*ill 5 c# task-parallel-library async-await
我正在使用以下代码获取端点并将其写入缓存:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
代码在IIS上运行.
如果无法访问端点,我希望GetAsync抛出异常.即使使用Try-Catch,它也似乎永远不会失败.GetAsync永远不会返回(我在HttpClient上尝试了5秒的超时,仍然没有返回).
这会引发异常:
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;
}
Run Code Online (Sandbox Code Playgroud)
我得到了预期的"无法连接到远程服务器".
我怀疑它与IIS中运行的代码有关,但为什么呢?如何在不需要启动新任务的情况下正确抛出异常?
| 归档时间: |
|
| 查看次数: |
5632 次 |
| 最近记录: |