次のコード スニペットを検討してください。
a)
IO.puts "test1"
task = Task.async fn ->
Foo.Bar.send_file_for_processing(file_url)
end
IO.puts "test2"
content = Task.await(task)
IO.puts "test4"
b)
IO.puts "test1"
content = Foo.Bar.send_file_for_processing(file_url)
IO.puts "test2"
および Foo.Bar モジュールでは:
def send_file_for_processing(file_url) do
json = file_url |> encoded_file |> request_json
IO.puts "test3"
request = HTTPoison.post(
@processing_endpoint,
json,
@headers,
params: %{"key": @api_key}, connect_timeout: 100000, recv_timeout: 100000, timeout: 100000
)
IO.puts "test5"
(...)
end
コード スニペット a) を使用すると、プログラムが HTTPoison POST 要求中にハングするかのように、"test5" に到達しません。それは決して終わらない。一方、スニペット b) では、HTTPoison POST リクエストは遅延なく正常に完了します。
正直なところ、これをデバッグするのに時間がかかりましたが、まだスニペット a) の問題を理解していません。Task モジュールを誤用していませんか? ドキュメントを確認しましたが、この問題を説明するものは見つかりませんでした。
編集: スニペットの出力 a)
test1
test2
test3