如何从Lua/MoonSharp脚本中调用&等待async C#方法?

我想从Lua/MoonSharp代码中调用&等待C# async方法。

例如:

1)。

async void Test1() {
     await Something();
}

2)。

async Task Test2() {
     await Something();
}

然后从Lua调用它 - 1)不会等待而继续脚本执行,2)会抛出“ScriptRuntimeException:无法转换clr类型System.Threading.Tasks.Task`1 [System.Threading.Tasks.VoidTaskResult] \nMoonSharp.Interpreter.Interop.Converters.ClrToScriptConversions.ObjectToDynValue”异常。

有没有什么办法让它工作?

点赞
用户9893982
用户9893982

我终于选择了回调。虽然我不认为这是一个好的解决方法,但是如果有任何更好的解决方法,我将非常乐意更改已接受的答案。

对于任何感兴趣的人,以下是如何使回调在MoonSharp中工作的方法:

Lua / MoonSharp

SomethingAsync(10function()
    SomePrintFunction('异步工作完成')
end

C#

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

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

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

2018-06-05 18:08:24