# Why don't we have: Base.broadcastable(task::Task) = Ref(task)?

**URL:** <https://discourse.julialang.org/t/why-dont-we-have-base-broadcastable-task-task-ref-task/47889>\
**Category:** Internals & Design\
**Tags:** broadcast, task\
**Created:** [October 6, 2020, 8:40pm UTC](https://discourse.julialang.org/t/why-dont-we-have-base-broadcastable-task-task-ref-task/47889 "2020-10-06T20:40:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![nielsls](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nielsls/32/18482_2.png) [@nielsls](https://discourse.julialang.org/u/nielsls)\
**Post date:** [October 6, 2020, 8:40pm UTC](https://discourse.julialang.org/t/why-dont-we-have-base-broadcastable-task-task-ref-task/47889/1 "2020-10-06T20:40:22Z")

</div>

Is there any reason why Task is not made broadcastable using:

```julia
Base.broadcastable(task::Task) = Ref(task)

```

Currently, the below line fails if task\_collection is a single Task (scalar):

```julia
x = fetch.(task_collection)

```

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [October 6, 2020, 9:19pm UTC](https://discourse.julialang.org/t/why-dont-we-have-base-broadcastable-task-task-ref-task/47889/2 "2020-10-06T21:19:37Z")

</div>

That’s a good question! Maybe it was just missed.

On another note, I wonder why a variable named “task\_collection” can even be just a `Task`, instead of an `Array{Task,1}` with only one element?

---

<div class="post-metadata">

**Author:** ![nielsls](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nielsls/32/18482_2.png) [@nielsls](https://discourse.julialang.org/u/nielsls)\
**Post date:** [October 7, 2020, 6:47am UTC](https://discourse.julialang.org/t/why-dont-we-have-base-broadcastable-task-task-ref-task/47889/3 "2020-10-07T06:47:17Z")

</div>

If `as` and `bs` are scalars, then `task_collection` will be a scalar (due to how `broadcast` works)

```julia
task_collection = @sync broadcast(as, bs) do a, b
    return @async do_longrunning_io_stuff(a,b)
end

```

I assume the pattern above could be the idiomatic way to use coroutines for calculating a collection of values where each value depends on some IO.
