Base.throwto() blocking perpetually

I recently found that throwto() never returns, it just hangs (see this GitHub issue) and constructed a little demo:

task = @async begin 
    while true
        print("-")
    end
end

sleep(0.003)
println("Throwing...")
Base.throwto(task, InterruptException())
println("Thrown.")

Perhaps this is better at home in New To Julia, but this has left me both confused and intrigued.

  1. Why? Was there a conscious design choice gone into that behaviour?
  2. In the case where I may have any number of tasks where instead of println("-") it is a blocking call that takes an unknown (potentially infinite) amount of time (eg readbytes!(mysocket, mylist, 4)), how can I stop a task in middle of a blocking call from outside the task?

Apparently the answer to the second question is quite easy, use schedule(task, InterruptException(), error=true) instead of Base.throwto(task, InterruptException())
(See the very bottom of this page.)

Although I am still curious as to why the infinitely hanging call, if that is used a non-limited number of times within a program would that eventually clog up memory with records of tasks/threads that have throwto() blocking them?