c# - 如何从 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
异常。
有什么办法可以使这项工作?
解决方案
我终于完成了回调。不过,我认为这不是一个好的解决方案。因此,如果有人有更好的答案,我将非常乐意更改已接受的答案。
对于任何感兴趣的人,这里是如何使回调在 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();
}
}
更多信息可以在文档中找到。