Как остановить гоночный метод Syncronous перед асинхронным вызовом - PullRequest
0 голосов
/ 07 января 2019

У меня есть конструктор класса в виде:

protected LoginFunctions(){…..}

В этой функции я вызываю асинхронную функцию, используя:

var tsk = Task.Run(async () => await PrePopulateLogin());

Моя проблема в том, что функция PrePopulateLogin все еще выполняется при выходе из конструктора. Как я могу изменить свой код так, чтобы конструктор не выходил до тех пор, пока PrePopulateLogin не закончил?

PrePopulateLogin должен быть асинхронным.

private async Task PrePopulateLogin()
    {
        var vector = await JSRuntime.Current.InvokeAsync<string>("blazorExtensions.ReadCookie", "vector");
        var secureNextLogon = await JSRuntime.Current.InvokeAsync<string>("blazorExtensions.ReadCookie", "SecureNextLogon");

        if (secureNextLogon != null)
        {
            var encryptor = new AesEncryptor(SecurityConstants.SecurityKey, Convert.FromBase64String(vector));
            var decryptedValue = encryptor.Decrypt(secureNextLogon);
            var email = decryptedValue.Split(' ')[0].Substring(6);
            var password = decryptedValue.Split(' ')[1].Substring(9);
            var rememberMe = decryptedValue.Split(' ')[2].Substring(11);
            if (rememberMe == "True")
            {

                UserModel.EmailAddress = email;
                UserModel.Password = password;
                UserModel.RememberUser = true;
            }
        }
    }

1 Ответ

0 голосов
/ 07 января 2019

Наконец-то нашел, как это сделать с Blazor.

Мне нужно было удалить вызов из конструктора и вместо этого переопределить событие инициализатора BlazorComponents таким образом:

protected override async Task OnInitAsync()
{
    await PrePopulateLogin();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...