首页 > 解决方案 > 如何从 Lua / MoonSharp 脚本调用和等待异步 C# 方法?

问题描述

我想从 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异常。

有什么办法可以使这项工作?

标签: c#luamoonsharp

解决方案


我终于完成了回调。不过,我认为这不是一个好的解决方案。因此,如果有人有更好的答案,我将非常乐意更改已接受的答案

对于任何感兴趣的人,这里是如何使回调在 MoonSharp 中工作:

Lua / MoonSharp

SomethingAsync(10, function()
    SomePrintFunction('async work done')
end)

C#

async void SomethingAsync(int whatever, DynValue callback) {
    await SomeAsyncWorkBeingDone();

    if (callback.Type == DataType.Function) {
        callback.Function.Call();
    }
}

更多信息可以在文档中找到。


推荐阅读