如何杀死朱莉娅的任务/协同程序?

时间:2014-11-30 03:23:08

标签: task julia coroutine

using HttpServer

http = HttpHandler() do request::Request, response::Response
    show(request)
    Response("Hello there")
end

http.events["error"] = (client, error) -> println(error)
http.events["listen"] = (port) -> println("Listening on $port")
server = Server(http)

t = @async run(server, 3000)

这会异步启动一个简单的小型Web服务器。问题是我不知道如何阻止它。我一直在阅读Julia文档,并尝试找到一些将从队列中删除此任务的函数(killinterrupt等),但似乎没有任何效果。

我该怎样杀死这个任务?

1 个答案:

答案 0 :(得分:9)

我没有看到专门结束任务的官方方法,但我认为通用解决方案是the addition of throwto,,它允许您立即安排具有待处理异常的任务。

...
t = @async run(server, 3000)
...
ex = InterruptException()
Base.throwto(t, ex)
close(http.sock) # ideally HttpServer would catch exception to cleanup