如何在异步调用之前停止同步方法
How do I stop a Syncronous method racing ahead of an async Call
我有一个 class 形式的构造函数:
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;
}
}
}
终于找到了如何使用 Blazor 完成它。
我需要从构造函数中删除调用,而是覆盖 BlazorComponents 初始化程序事件:
protected override async Task OnInitAsync()
{
await PrePopulateLogin();
}
我有一个 class 形式的构造函数:
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;
}
}
}
终于找到了如何使用 Blazor 完成它。
我需要从构造函数中删除调用,而是覆盖 BlazorComponents 初始化程序事件:
protected override async Task OnInitAsync()
{
await PrePopulateLogin();
}