【发布时间】:2014-08-21 16:25:22
【问题描述】:
给定的代码类似于
Task.Run(() =>
{
using (var client = new HttpClient())
{
var responseTask = client.GetAsync(urlToInvoke);
}
});
在这种情况下,GetAsync 似乎没有实际运行。任务是在完成之前取消还是这里实际发生了什么?
现在,如果你稍微改变一下并插入
Task.Run(() =>
{
using (var client = new HttpClient())
{
var responseTask = client.GetAsync(urlToInvoke);
Task.Delay(5000).Wait()
}
});
GetAsync 确实完全执行。这里发生了什么? Task.Delay 是否将自己与 responseTask 内部的同一个 Task 关联最终使其等同于 responseTask.Wait()?
【问题讨论】:
-
什么都没有发生......你只是得到了一个任务对象,它永远不会被执行。
-
@CrazyDart 那么为什么它在包含
Task.Delay的情况下“工作正常”? -
如果一个未等待的任务以异常结束,应用程序may crash。当您等待任务时,您会将异常传递到
await的位置。 -
我怀疑它不是导致它工作的延迟......它是等待。如果您访问结果或调用等待,它将在该任务对象上执行。
标签: c# .net asynchronous task-parallel-library dotnet-httpclient