From 17a0b20ca4898a5bb02198bac407891946d1570e Mon Sep 17 00:00:00 2001 From: Rik Huijzer Date: Fri, 18 Feb 2022 20:59:08 +0100 Subject: [PATCH] Extract TapedTask try-catch method --- src/tapedtask.jl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/tapedtask.jl b/src/tapedtask.jl index fca577cc..2c8dee4c 100644 --- a/src/tapedtask.jl +++ b/src/tapedtask.jl @@ -16,10 +16,8 @@ struct TapedTask end end -function TapedTask(tf::TapedFunction, args...) - produce_ch = Channel() - consume_ch = Channel{Int}() - task = @task try +function wrap_task(tf, produce_ch, consume_ch, args...) + try producer = () -> begin ttask = current_task().storage[:tapedtask] if length(ttask.produced_val) > 0 @@ -45,6 +43,12 @@ function TapedTask(tf::TapedFunction, args...) close(produce_ch) close(consume_ch) end +end + +function TapedTask(tf::TapedFunction, args...) + produce_ch = Channel() + consume_ch = Channel{Int}() + task = @task wrap_task(tf, produce_ch, consume_ch, args...) t = TapedTask(task, tf, produce_ch, consume_ch) task.storage === nothing && (task.storage = IdDict()) task.storage[:tapedtask] = t