我试图了解如何在Perl中实现异步(并行)函数调用(在我的一个Mojolicious控制器中处理大量数据集)。
下面是我的例子(一个简单的例子):
use Future::AsyncAwait;
async sub asyncSub{
async sub funcA{
my $num = shift;
print "This is $num (START)\n";
sleep 1;
print "This is $num (END)\n";
};
funcA(1);
funcA(2);
funcA(4);
funcA(5);
funcA(6);
funcA(7);
funcA(8);
funcA(9);
funcA(10);
}
asyncSub();
这段代码输出:
This is 1 (START)
This is 1 (END)
This is 2 (START)
This is 2 (END)
This is 4 (START)
This is 4 (END)
This is 5 (START)
This is 5 (END)
This is 6 (START)
This is 6 (END)
This is 7 (START)
This is 7 (END)
This is 8 (START)
This is 8 (END)
This is 9 (START)
This is 9 (END)
This is 10 (START)
This is 10 (END)
它总是同步工作。
预先感谢你的帮助。
1条答案
按热度按时间n8ghc7c11#
是的,
sleep
总是同步的。你没有进行任何异步调用,所以你的代码不是异步的。Future::AsyncAwait不是一个多任务系统。它不提供异步性。Future类似于JavaScript promise,甚至更类似于.NET tasks。They provide a means of working with asynchronous calls more easily.但是你仍然需要进行异步调用来获得异步性。
如果在C#中使用
Thread.Sleep( 1000 )
(同步)而不是await Task.Delay( 1000 );
(异步),也会遇到同样的问题。