当我们链接继续调用时,是否会创建新的任务对象



考虑该方法返回一系列任务的情况,例如这样(我主要与.NET 3.5一起工作,因此示例使用CONTUM与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()返回时,是否会创建一个新的任务对象,还是编译器以某种方式重复使用该实例?我对价值类型的任务感兴趣。在这种情况下,星期表现:它是复制了所有这些时间,还是包装器任务类提供了一种有效的方式将其运输到最外面的方法?

ContinueWith Will 始终创建一个新任务。它不可能做其他事情。该方法的整个设计是ContinueWith采用现有的Task,在完成后执行一些任意方法,并产生新的结果。ContinueWith的结果永远不会与延续的任务相同,因此不能仅仅重新使用它。通过设计,不是突变 它添加一个延续的任务(至少以任何外部可见的方式,从技术上讲,从技术上讲,将持续点燃是任务的内部突变(。

>

最新更新