【发布时间】:2018-02-19 21:14:48
【问题描述】:
考虑方法返回一系列任务的情况,例如这个(我主要使用 .net 3.5,所以示例使用 ContinueWith,但问题与 await 相同):
static Task UnwrappedTask()
{
Task<Task> t = TestStr().ContinueWith( (
return GetTaskFromString(s).ContinueWith(
// returns a task
});
});
return t.Unwrap();
}
static async Task GetTaskFromString(string str)
{
await Task.Delay(3000);
}
static async Task<string> TestStr()
{
await Task.Delay(3000);
return "res";
}
每次我们从ContinueWith() 返回时,是否都会创建一个新的Task 对象,或者编译器是否会以某种方式重用该实例?我对 Value 类型 Task.Result 在这种情况下的行为方式很感兴趣:它是一直被复制的,还是包装器 Task 类提供了一种将其传输到最外层方法的有效方式?
【问题讨论】:
标签: c# async-await task compiler-optimization value-type