go - Clojure 中的 Golang Ctx WITHTimeOut
问题描述
在 clojure 并发中,如果执行任务需要很长时间,我希望我生成的线程会自行杀死,类似于 Golang ctx withtimeout 提供的。我该怎么做?
请注意,我对 java 线程一无所知。
解决方案
您无法彻底杀死 Java 线程,因此人们通常会编写运行时间很长的线程来偶尔检查一个标志,并且只有在适当的时候才继续工作。
另一方面,线程的客户端可以停止等待答案。如果您使用 启动线程future
,您可以使用https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/derefderef
上的超时参数,或使用 进行检查。future-done?
当你有很多异步的事情发生时,Clojure 的 core.async 库中更好的类似 Go 的代数可能会有所帮助(https://clojure.github.io/core.async/)作为原始 Java 线程的替代品。
推荐阅读
- groovy - 在 Groovy 中创建动态 XML 标记
- javascript - 通过多个属性值计算数组中的对象并在 HTML 中显示结果
- c# - 客户端无法连接到在 IIS 托管环境上运行的 Blazor WebAssembly 应用的 SignalR 集线器
- javascript - 在没有用户设置选项的情况下防止选项弹出关闭
- python - plotly express:如何控制条形开始位置?
- javascript - 如何正确延迟加载 Vue.js 中的 json 文件以减小包大小?
- debugging - Hyperledger Indy:无法初始化节点,init_indy_node 失败并出现错误
- python - 使用漂亮表向列添加信息
- scala - 从列中搜索字符串并在带有结果的 spark 数据框中创建新列
- .net - 无法在 Visual Studio 团队资源管理器中从 https://microsoftit.visualstudio.com 克隆分支存储库