[英]What is “await do” in Perl 6?
我在Perl 6中看到以下代碼:
await do for @files -> $file {
start {
#do something ... }
}
它以異步模式運行。 為什么上面的代碼需要do
? 在Perl 6中do
的目的是do
? 有人可以詳細解釋上面的代碼嗎?
還有一個選項可以寫這樣的東西:
for @files -> $file {
start {
#do something ... }
}
並等待承諾履行的代碼?
do
的目的 for
關鍵字可以以兩種不同的方式使用:
1)作為獨立的塊聲明:
for 1..5 { say $_ }
2)作為附加到語句末尾的語句修飾符:
say $_ for 1..5;
當在較大的語句中遇到bare for
關鍵字時,它被解釋為第二種形式。
如果你想在一個更大的語句中使用塊形式(例如作為await
函數的參數),你必須在它前面添加do
來告訴解析器你在這里開始一個塊語句,並希望它的返回值。
更一般地, do
可以確保接下來使用它,好像它是自己的聲明將被解析相同的規則進行解析,並使其提供一個返回值。 因此,它允許我們將任何語句用作更大語句中的表達式。 do if
, do while
,等等都以同樣的方式工作。
你展示的代碼......
await do for @files -> $file {
start {
#do somthing ... }
}
......執行以下操作:
@files
。 start
關鍵字來調度異步任務,這可能與當前元素$file
。 ( $*SCHEDULER
變量決定實際如何啟動任務;默認情況下,它使用簡單的線程池調度程序。) start
調用都會立即返回一個Promise
,它將在異步任務完成時更新。 do for
收集循環體的所有返回值的序列(即promises)。 await
函數接受此序列作為其參數,並等待所有promise完成。 不完全確定你的意思。 如果你想記住承諾但不等待它們只是噴射,只需將它們存儲在一個數組中:
my @promises = do for @files -> $file {
start {
#do something ... }
}
#other code ...
await @promises;
等待所有預定/運行任務沒有便利功能。 你總是要跟蹤承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.