@@ -377,16 +377,25 @@ defmodule Task.Supervised do
377377 stream_close ( config )
378378 :erlang . raise ( kind , reason , __STACKTRACE__ )
379379 else
380- { :suspended , [ value ] , next } ->
381- waiting = stream_spawn ( value , spawned , waiting , config )
382- stream_reduce ( { :cont , acc } , max - 1 , spawned + 1 , delivered , waiting , next , config )
383-
384- { _ , [ value ] } ->
385- waiting = stream_spawn ( value , spawned , waiting , config )
386- stream_reduce ( { :cont , acc } , max - 1 , spawned + 1 , delivered , waiting , :done , config )
387-
388380 { _ , [ ] } ->
389381 stream_reduce ( { :cont , acc } , max , spawned , delivered , waiting , :done , config )
382+
383+ result ->
384+ { values , next } =
385+ case result do
386+ { :suspended , values = [ _ | _ ] , next } -> { values , next }
387+ { _ , values = [ _ | _ ] } -> { values , :done }
388+ end
389+
390+ # right fold because values are in reverse order
391+ { waiting , spawned } =
392+ List . foldr ( values , { waiting , spawned } , fn value , { waiting , spawned } ->
393+ waiting = stream_spawn ( value , spawned , waiting , config )
394+ { waiting , spawned + 1 }
395+ end )
396+
397+ max = max - length ( values )
398+ stream_reduce ( { :cont , acc } , max , spawned , delivered , waiting , next , config )
390399 end
391400 end
392401
0 commit comments