有人可以解释一下这两种说法之间的区别吗:
Task<Task> bTask = backup.BackupCurrentDatabaseAsync()
.ContinueWith(_ => CompressArchiveAsync());
//unwrap the tasks to produce one entire task
Task t = bTask.Unwrap();
vs
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()
task.
.ContinueWith(_ => CompressArchiveAsync());
相当于:
.ContinueWith(_ =>
{
return CompressArchiveAsync();
});
注意return
.
您的第二个代码片段无法编译,因为ContinueWith
不返回Task<Task>
,但只是一个Task
,并且没有什么可以打开的。
以下内容绑定到Func<Task, Task>
(一个函数需要一个Task
并返回一个Task
)
_ =>
{
return CompressArchiveAsync();
}
但以下内容实际上绑定到Action<Task>
(一个函数需要一个Task
但不返回任何内容):
_ =>
{
CompressArchiveAsync();
}
以及对Task
由...制作CompressArchiveAsync
永远不会返回。如果没有引用它,您就无法检查Task
的状态。
注意:
-
ContinueWith<TResult>(Func<Task, TResult>) http://msdn.microsoft.com/en-us/library/dd321405.aspx返回一个
Task<TResult>
-
ContinueWith(Action<Task>) http://msdn.microsoft.com/en-us/library/dd270696.aspx返回一个
Task
.
因此你的ContinueWith(Func<Task, Task>)
返回一个Task<Task>
你可以打开它,但是你的ContinueWith(Action<Task>)
只是返回一个Task
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)