如何在Nim语言(C后端)中延迟执行proc?
Nim中类似JavaScript setTimeout的异步延迟实现
对于有JavaScript开发经验的你,在基于C后端的Nim中实现等效setTimeout的异步延迟执行,主要依赖标准库的asyncdispatch模块,有两种常见写法:
1. 异步协程范式写法(推荐)
这种方式贴合Nim异步编程的主流风格,类似JS中async/await的用法:
import asyncdispatch proc main() {.async.} = await sleepAsync(1000) # 延迟1000毫秒,对应JS setTimeout的时间参数 echo "Potato" waitFor main() # 启动并等待异步协程执行完成
核心说明:
- 带
{.async.}标记的proc是Nim的异步协程,等价于JS的async函数 sleepAsync(ms)是异步延迟函数,只会暂停当前协程,不会阻塞整个进程waitFor用于触发异步协程并等待其执行完毕,避免程序提前退出
2. 回调式写法(贴近JS setTimeout风格)
如果习惯JS直接传回调的写法,可以用callLater函数:
import asyncdispatch callLater(1000): echo "Potato" runForever() # 启动并维持事件循环,否则程序会立即退出
核心说明:
callLater(delayMs, callback)直接接受延迟时间和执行代码块,和setTimeout写法高度一致- 必须调用
runForever()显式维持事件循环——这和JS在浏览器/Node环境自动维持事件循环的行为不同,Nim需要手动启动并保持事件循环运行,才能让延迟回调生效
内容的提问来源于stack exchange,提问作者Philipp Doerner
相关产品推荐
相关产品推荐

