# @async read(stdin, Char)

**URL:** <https://discourse.julialang.org/t/async-read-stdin-char/36942>\
**Category:** General Usage\
**Tags:** question\
**Created:** [April 3, 2020, 9:14am UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942 "2020-04-03T09:14:31Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Impressium](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/impressium/32/19575_2.png) [@Impressium](https://discourse.julialang.org/u/Impressium)\
**Post date:** [April 3, 2020, 9:14am UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/1 "2020-04-03T09:14:31Z")

</div>

I want to listen on the `stdin` but my `module` stucks loading. I see kinda the problem. Is there a way around?

```julia
module T
       t() = @async while true read(stdin, Char) end
       t()
end

```

---

<div class="post-metadata">

**Author:** ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)\
**Post date:** [April 4, 2020, 10:15pm UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/2 "2020-04-04T22:15:59Z")

</div>

Are you precompiling the module? If so, it might be breaking the precompilation as it uses stdin for RPC. Maybe lazily start the task listening to stdin? Another way is to start only if it’s not precompiling (see, e.g., Requires.jl for how to do it).

---

<div class="post-metadata">

**Author:** ![Impressium](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/impressium/32/19575_2.png) [@Impressium](https://discourse.julialang.org/u/Impressium)\
**Post date:** [April 6, 2020, 11:25am UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/3 "2020-04-06T11:25:23Z")

</div>

Just like the example above. I’m using Juno and tried it in the REPL.

Have you tried it in the REPL?

> [@tkf](#):
>
> Maybe lazily start the task listening to stdin?

How is this done?

---

<div class="post-metadata">

**Author:** ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)\
**Post date:** [April 6, 2020, 11:36am UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/4 "2020-04-06T11:36:04Z")

</div>

Juno does some weird stuff for communicating over the REPL, so this breaks everything basically 😉  
But your code breaks a normal non-Juno REPL too, because you’re stealing repl inputs. I’d recommend either running that code without a REPL or putting it into a `@sync` block.

---

<div class="post-metadata">

**Author:** ![Impressium](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/impressium/32/19575_2.png) [@Impressium](https://discourse.julialang.org/u/Impressium)\
**Post date:** [April 6, 2020, 11:47am UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/5 "2020-04-06T11:47:27Z")

</div>

> [@pfitzseb](#):
>
> putting it into a `@sync` block

How can I put a `while true` into a `@sync`-block?

---

<div class="post-metadata">

**Author:** ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)\
**Post date:** [April 6, 2020, 12:04pm UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/6 "2020-04-06T12:04:26Z")

</div>

It’s impossible to say how exactly you should do that without knowing what you’re doing with the inputs.

---

<div class="post-metadata">

**Author:** ![Impressium](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/impressium/32/19575_2.png) [@Impressium](https://discourse.julialang.org/u/Impressium)\
**Post date:** [April 6, 2020, 12:36pm UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/7 "2020-04-06T12:36:07Z")

</div>

That’s true 🙂  
I’m calling the julia script from C# and redirecting the input and output stream. I want to listen on both sites the whole time in order to communicate.

---

<div class="post-metadata">

**Author:** ![Impressium](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/impressium/32/19575_2.png) [@Impressium](https://discourse.julialang.org/u/Impressium)\
**Post date:** [April 6, 2020, 12:42pm UTC](https://discourse.julialang.org/t/async-read-stdin-char/36942/8 "2020-04-06T12:42:23Z")

</div>

> [@pfitzseb](#):
>
> I’d recommend either running that code without a REPL

This worked for me. Thank you 👍
