【发布时间】:2015-02-16 06:12:12
【问题描述】:
谁能解释一下这两种说法的区别:
Task<Task> bTask = backup.BackupCurrentDatabaseAsync()
.ContinueWith(_ => CompressArchiveAsync());
//unwrap the tasks to produce one entire task
Task t = bTask.Unwrap();
对
Task<Task> bTask = backup.BackupCurrentDatabaseAsync()
.ContinueWith(_ =>
{
CompressArchiveAsync();
});
//unwrap the tasks to produce one entire task
Task t = bTask.Unwrap();
ExtractArchiveAsync()、BackupCurrentDatabaseAsync()、RestoreDatabaseAsync() 方法都返回一个Task。
在这里,第一个 Continuation 返回一个 Task<Task>。然后我可以Unwrap()这个任务将继续放在结果(内部)任务上。
第二个版本无法编译。这里唯一不同的是CompressArchiveAsync() 周围的大括号。
我正在尝试访问结果(内部)Task 以检查Task.Status。如果我使用第二种方法,Task.Status 将报告BackupCurrentDatabaseAsync() 任务的结果。
【问题讨论】:
-
旁注:如果可能,考虑迁移到 4.5 和 async/awiat... 将产生更易于阅读的代码...
-
不幸的是仍然在 4!在 4.5 中如何实现上述目标?
-
async/await是 C# 5.0 的主要功能。虽然它仅在面向 .NET 4.5 时开箱即用,但您可以将异步目标包用于port it to .NET 4.0。
标签: c# .net task-parallel-library async-await