Как вызвать и ожидать асинхронный метод C # из скрипта Lua / MoonSharp? - PullRequest
0 голосов
/ 04 июня 2018

Я хотел бы вызвать и ждать асинхронный метод C # из кода Lua / MoonSharp.

Например:

1).

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

2).

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

А потом позвонил Луа - 1).не ждет, но продолжает выполнение скрипта, и 2).выдает ScriptRuntimeException: cannot convert clr type System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult] MoonSharp.Interpreter.Interop.Converters.ClrToScriptConversions.ObjectToDynValue исключение.

Есть ли способ заставить эту работу работать?

1 Ответ

0 голосов
/ 05 июня 2018

Я наконец ушел с обратными вызовами.Я не думаю, что это хорошее решение. Так что, если у кого-нибудь получится лучше, я буду более чем рад изменить принятый ответ .

Для всех, кто интересуется, вот как заставить работать обратные вызовы в 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();
    }
}

Более подробную информацию можно найти в документах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...