我一直在研究,但无法找到任何确切的答案。我正在使用MVVM Light和WPF编写一个应用程序。我有一个服务被注入到我的ViewModel中来检查设置的某个属性的有效性。该服务进行Web调用并且是异步的。该调用不需要停止应用程序的执行,仅仅是为了向用户提供输入值的有效性视觉反馈。
因此,我已经把它们组合在一起使其工作了,但感觉有些不恰当。
有没有适当的方式在属性更改时执行异步方法而不使用async void
之类的东西呢?
以下是我目前的代码。
public string OmmaLicenseNumber
{
get => _ommaLicenseNumber;
set
{
Set(() => OmmaLicenseNumber, ref _ommaLicenseNumber, value);
Patient.OmmaLicenseNumber = value;
var _ = CheckLicenseValid();
}
}
private async Task CheckLicenseValid()
{
var valid = await _licenseValidationService.IsValidAsync(OmmaLicenseNumber);
// We don't want the UI piece showing up prematurely. Need 2 properties for this;
LicenseValid = valid;
LicenseInvalid = !valid;
}
如果我简单地尝试在异步方法上调用
.Result
,会导致死锁,并且需要重新启动应用程序才能解决。虽然我的方法可行,但我并不是很喜欢。还有其他选择吗?