簡體   English   中英

榆木並發

[英]Concurrency in Elm

我有一個計算量很大的代碼,需要在“更新”功能中運行。

當它運行時,我的整個應用程序都會阻塞,直到完成為止。

有什么辦法可以異步運行此代碼以防止阻塞? (同時不使用端口並留在榆樹中)

榆樹任務不支持搶先式多任務處理。

使用Process.spawn ,您可以構造將用作Task.andThen參數時上下文切換的任務。

但是,對於這些應用程序,您必須在結果任務的類型為Task x Process.Id的約束下進行工作,這意味着沒有簡單的方法可以將任務的結果傳達回主應用程序。

請參閱Process.Id 的文檔

您可以嘗試將其作為任務運行。 可以搶先停止任務以執行應用程序的其他部分,盡管我不確定在某些使用全部CPU容量的情況下它們如何工作:

DoHeavyStuff a b ->
    let
        task param1 param2 =
            Task.succeed 1
            `Task.andThen` (\_ -> Task.succeed <| expensive param1 param2)
    in
    (model, Task.perform NoOp FinishedWork (task a b))

FinishedWork result ->
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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