如何在Dart中分配期货结果,取决于哪个期货产生了这些结果?
在Dart中,我希望运行几个相互独立的代价高昂的函数,并根据生成它们的函数将结果分配给变量。这大致是一个平行的版本:如何在Dart中分配期货结果,取决于哪个期货产生了这些结果?,dart,future,Dart,Future,在Dart中,我希望运行几个相互独立的代价高昂的函数,并根据生成它们的函数将结果分配给变量。这大致是一个平行的版本: double x=getX(); 双y=getY(); 我在想这样的事情: 双x,y; 未来,等等([ futureGetX(), 未来 ]).然后((列出结果){ 结果:foreach((r){ //如果(r由futureGetX产生)x=r; //如果(r由futureGetY产生)y=r; }); }); 我不知道如何实现这个由部件生成的。一种方法是将每个函数的结果包
double x=getX();
双y=getY();
我在想这样的事情:
双x,y;
未来,等等([
futureGetX(),
未来
]).然后((列出结果){
结果:foreach((r){
//如果(r由futureGetX产生)x=r;
//如果(r由futureGetY产生)y=r;
});
});
我不知道如何实现这个由部件生成的。一种方法是将每个函数的结果包装在不同的类中,然后在部分检查结果的类:
如果(r是wrapperForX)x=r.getValue();
如果(r是wrapperForY)y=r.getValue();
但这对我来说似乎很不雅。有什么建议吗?未经测试,但我想我得到了这个建议。:)
使用闭包:
Future.wait([
() => { x = await futureGetX()},
() => { y = await futureGetY()},
]);
多亏了Randal,我找到了一个解决方案:
Future.wait([
() async { x = await futureGetX(); } (),
() async { y = await futureGetY(); } ()
]);
要并行地等待未来,您可以使用Future.wait
,正如您已经注意到的那样。
Future.wait返回的列表中的结果(异步)与原始futures的顺序相同,因此您不必使用forEach
,只需执行以下操作:
x=结果[0];
y=结果[1];
另一种方法是使用来自异步包的FutureGroup,记录结果列表的FIFO行为:我们如何知道哪个产生了结果?没有生成结果的那个是否返回null?还是只想得到第一个结果而忽略第二个?谢谢,这已经足够接近了。但是列表元素需要是未来元素,而不仅仅是函数。看到我下面的答案。很高兴知道,但这是一个黑客还是一个功能?功能。我可以看到它实际上并没有文档化(doh!),但我可以向您保证,它的目的就是这样。