Выполнить синхронную команду асинхронно в Xamarin - PullRequest
0 голосов
/ 09 апреля 2020

Я создал приложение Xamarin.Forms, которое использует DLL из многоуровневого приложения для отправки вида SQL команды (это не SQL!)

Проблема заключается в том, что она обеспечивает только синхронные методы и мое приложение "не отвечает". Как я могу сделать асинхронный метод, который будет вызывать sycnhronous и ждать его результата без зависания пользовательского интерфейса?

Я пробовал следующее, но кажется, что он будет ждать вечно, как если бы поток никогда не останавливался.

public async Task<ExecuteCommandResult> ExecuteMocaCommandAsync(String ps_command)
    {
        return await Task<ExecuteCommandResult>.Run(() =>
            {
                return ExecuteMocaCommand(ps_command);
            }
        );
    }

и я называю это так:

ExecuteCommandResult l_res = l_con.ExecuteMocaCommandAsync("list users where usr_id = '" + gs_UserName + "'").Result;

Я явно что-то упускаю и надеюсь, что вы можете указать мне правильное направление.

С уважением, Йоз

1 Ответ

1 голос
/ 09 апреля 2020

Task.Run выглядит хорошо (хотя вы можете упростить его, изменив Task<ExecuteCommandResult>.Run на Task.Run). Это правильный способ для pu sh блокирования работы фонового потока в приложении пользовательского интерфейса.

Однако вы не можете использовать Result; , которая может тупиковая . Вам нужно будет вызвать свой метод, используя await:

ExecuteCommandResult l_res = await l_con.ExecuteMocaCommandAsync("list users where usr_id = '" + gs_UserName + "'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...