榆树中的并发

doo*_*ood 6 javascript concurrency asynchronous elm

我有一个计算成本很高的代码,我需要在我的'update'函数中运行.

当它运行时,我的整个应用程序都会阻塞,直到它完成.

有没有办法以异步方式运行此代码以防止阻塞?(虽然不使用端口并留在榆树)

Jos*_*uez 0

您可以尝试将其作为任务运行。可以抢先停止任务以执行应用程序的其他部分,尽管我不确定在某些使用全部 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 ->
    ...
Run Code Online (Sandbox Code Playgroud)