簡體   English   中英

Perl 6中的“等待做什么”是什么?

[英]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 ifdo 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM