生成进程的混合任务不执行任何操作

Mix task spawning a process does nothing

我创建了一个生成进程的混合任务。 它使用 Flow,从流中读取并写入 consumer.

中定义的文件

一天结束时,它只会产生一些进程。

如果我 运行 通过 iex 它工作正常,只要我离开 shell 运行ning.

但是,如果我从命令行将其作为混合任务启动,则没有任何反应,您如何让进程保持打开状态?

  use Flow

  def run([stream]) do
    specs = [{{ProdCon,[]},[]}]
    consumer = [{{Consumer,[]},[]}]

    stream
    |> Flow.from_enumerable()
    |> Flow.through_specs(specs)
    |> Flow.into_specs(consumer)
  end

生成一个 Task 来完成这项工作并等待它以 Task.yield/2:

完成
use Flow

def run([stream]) do
  task = Task.async(fn ->

    specs = [{{ProdCon,[]},[]}]
    consumer = [{{Consumer,[]},[]}]

    stream
    |> Flow.from_enumerable()
    |> Flow.through_specs(specs)
    |> Flow.into_specs(consumer)

  end)

  case Task.yield(task, 3_600) do # wait 1 hour
    {:ok, result} -> result
    nil -> IO.puts("Failed to get a result :(")
  end
end