如何从 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 中找到更多信息。
我想从 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 中找到更多信息。