这是关于任务.
task.continueWith()
和之间的区别task.continueWithTask()
是什么?你能为每个人提供一个例子吗?
Dou*_*son 12
continueWith和continueWithTask之间的主要区别是您传递给它的Continuation的泛型类型之一.
你可以将Continuation视为将某些输入类型转换为某种输出类型的东西.如果定义a Continuation<IN, OUT>
,IN
则then
通过a 传递给其方法的输入类型在哪里Task<IN>
,并且OUT
是方法返回的类型.
在调用时continueWith
,您传递一个Continuation<IN, OUT>
,并且该then
方法应该计算并返回OUT
给定Task<IN>
值作为输入的值.如果您没有要进行转换的阻塞工作,可以选择执行此操作,例如将整数数组减少为其元素的总和或计算String中的单词数.
在调用时continueWithTask
,你传递一个Continuation<IN, Task<OUT>>
,并且该then
方法应该返回一个Task<OUT>
最终生成OUT
值的值,给定IN
值作为输入.如果您能够将转换工作委派给现有的可重用任务,则可以选择此选项.
实际上,您不需要选择其中一个来完成您的工作.这是一个首选的风格问题,或者如果你有一个很好的Task
准备委托你的对话而不是一个Continuation
.通常,如果您有一系列转换链接在一起,则只使用Continuations.
这里的javadoc链接显示了Continuations的一些示例.另外,要了解更多信息,您可以在我的博客系列的第三部分中阅读它们.公平地说,continueWithTask
是Task API的唯一部分,我没有直接讨论该系列中的任何地方,主要是因为它在概念上并没有太大差别continueWith
.
只是为了补充Doug说的话,我会这样说:
continueWith
将then
方法的结果包装在一个Task
. continueWithTask
将不会; 它希望该then
方法返回一个Task
,从而避免任务中任务的双重包装.
continueWithTask
当你想要一起使用Continuation和TaskCompletionSource时,它是完美的.
归档时间: |
|
查看次数: |
1339 次 |
最近记录: |