如何从 Lua / MoonSharp 脚本调用和等待异步 C# 方法?

How to call & await async C# method from Lua / MoonSharp script?

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

有什么办法可以做到这一点吗?

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

对于任何感兴趣的人,这里是如何使回调在 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();
    }
}

可以在 doc's 中找到更多信息。