Perl Async/Await示例

eanckbw9  于 2023-03-30  发布在  Perl
关注(0)|答案(1)|浏览(214)

我试图了解如何在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)

它总是同步工作。
预先感谢你的帮助。

n8ghc7c1

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 );(异步),也会遇到同样的问题。

相关问题