问题描述
在我的应用程序中,有一个Asynch函数ProcessOffer()
,我想在构造函数中调用它,await ProcessOffer()
,但我不能,因为构造函数是非异步的。
注意::我已经尝试了这些Posts的答案,但它们没有帮助,没有解决方案。
public class Credentialviewmodel : ABaseviewmodel
{
private readonly CredentialRecord _credential;
private readonly ICredentialService _credentialService;
public Credentialviewmodel(
ICredentialService credentialService,CredentialRecord credential
) : base(
nameof(Credentialviewmodel)
)
{
_credential = credential;
_credentialService = credentialService;
_credentialStatus = _credential.State.ToString();
if (_credentialStatus == "Offered")
{
ProcessOffer();
}
}
public async Task ProcessOffer()
{
// Code
}
}
更新
public class Credentialviewmodel : ABaseviewmodel
{
[Obsolete]
private Credentialviewmodel(
IUserDialogs userDialogs,INavigationService navigationService,ICredentialService credentialService,IAgentProvider agentContextProvider,IConnectionService connectionService,IMessageService messageService,IPoolConfigurator poolConfigurator,CredentialRecord credential
) : base(
nameof(Credentialviewmodel),userDialogs,navigationService
)
{
// Code
_credentialStatus = _credential.State.ToString();
}
[Obsolete]
public static async Task<Credentialviewmodel> BuildCredentialviewmodel()
{
var obj = new Credentialviewmodel(default,default,default);
if (obj._credentialStatus == "Offered")
{
await obj.ProcessOffer();
}
return obj;
}
[Obsolete]
public async Task ProcessOffer()
{
// Code
}
}
解决方法
您不能具有异步构造函数。
有一个简单的解决方法。将构造函数标记为私有,并向您的类添加静态异步方法,该方法将包装构造函数并在返回类之前执行异步工作。
public class Class1
{
private Class1()
{
}
public static async Task<Class1> BuildAsync()
{
var obj = new Class1();
obj.MyData = await Task.FromResult("test");
return obj;
}
public string MyData { get; set; }
}
您将像这样初始化类:
var obj = await Class1.BuildAsync();