如何打电话&等待来自Lua / MoonSharp脚本的异步C#方法?

时间:2018-06-04 19:40:10

标签: c# lua moonsharp

我想打电话给&等待来自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例外。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:0)

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

对于任何有兴趣的人,如何使回调在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找到更多信息。