根据MSDN:
您可以使用AttachedToParent选项来表达结构化任务并行性,因为父任务隐式等待所有子任务完成.
所以我有这个代码:
public async Task<int> GetIntAsync()
{
var childTask = Task.Factory.StartNew(async () =>
{
await Task.Delay(1000);
},TaskCreationOptions.AttachedToParent);
return 1;
}
public async Task<ActionResult> Index()
{
var watch = Stopwatch.StartNew();
var task = GetIntAsync();
var result = await task;
var time = watch.ElapsedMilliseconds;
return View();
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么时间是0而不是1000.
使用基于任务的异步模式(TAP)的代码通常不使用AttachedToParent.AttachedToParent是任务并行库(TPL)设计的一部分.TPL和TAP都共享相同的Task类型,但在TAP代码中应该避免许多TPL成员.
在TAP中,通过使用"父"异步方法await从"子"异步方法返回的任务,您可以支持"父"和"子"异步方法的概念:
public async Task<int> GetIntAsync()
{
var childTask = Task.Run(() =>
{
...
await Task.Delay(1000);
...
});
...
await childTask;
return 1;
}
Run Code Online (Sandbox Code Playgroud)