使用协程重构 Lua 的阻塞 I/O

假设我有以下 Lua 代码,用于从文件中读取和解析数据。

local cjson = require 'cjson'

function read_data (path)
  local file = io.open(path, 'r')
  local raw = file.read('*all')
  return cjson.decode(raw)
end

function use_data (path)
  local data = read_data(path)
  -- 对`data`进行操作
end

我现在正在尝试找出这个基本示例的非阻塞版本将是什么样子。

在 JavaScript 中,您会将这两个函数都设置为异步,并await结果。但是从我读到的有关 Lua 的文章来看,似乎我只需要重构 read_data 函数来使用协程,而可以保持 use_data 代码不变。我该如何实现这一点?

编辑:欢迎使用外部库替换当前调用的解决方案。基本上需要什么来使示例变为非阻塞的即可。

点赞