【发布时间】:2018-11-14 05:00:12
【问题描述】:
我想从 Lua / MoonSharp 代码中调用并等待 C# 异步方法。
例如:
1).
async void Test1() {
await Something();
}
2).
async Task Test2() {
await Something();
}
然后从 Lua 调用它 - 1)。不等待但继续执行脚本,以及 2)。抛出ScriptRuntimeException: cannot convert clr type System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult]
MoonSharp.Interpreter.Interop.Converters.ClrToScriptConversions.ObjectToDynValue 异常。
有什么办法可以做到吗?
【问题讨论】:
-
转换器可能不知道如何转换生成的状态机。你最后想做什么?您可能需要使用
Something.Wait()进行同步块 -
@CamiloTerevinto 我正在为 Unity 游戏制作一个简单的模组系统。一些 C# 方法需要是异步的(例如加载资产包 - 以免阻塞渲染循环)。我需要从 mod 的 InitScript.lua 调用它们(在这种情况下)(因为游戏本身不太了解要加载的内容等 - 游戏只是为 Lua 脚本提供了一个 api。
-
@CamiloTerevinto 正如你提到的,我也尝试过
Something.Wait(),但没有运气 - 它冻结了整个 Unity 编辑器。