我有一个从ViewModelBase继承的ViewModel。目前我在我的ViewModel中调用我的服务,如下所示:
private void Login(string _username, string _password)
{
Task.Run(async () =>
{
var isLoginSuccess = await _authenticationDataService.Login(_username, _password);
if (isLoginSuccess == true) { }
});
}
在我的AuthenticationService中,它看起来像这样:
public async Task<bool> Login(string username, string password)
{
Token = await GetAPIToken(username, password);
return true;
}
private static async Task<string> GetAPIToken(string userName, string password)
{
//Blah blah blah wont bore you with the detail
}
现在我想要的是放置一个通用的Task方法,它将运行任何“awaitables”我传递给它并返回一个通用结果(我可以在我的viewmodel中正确地转换结果)在我的ViewModelBase中。
所以我可以做这样的事情:
private void Login(string _username, string _password)
{
var serviceCall = _authenticationDataService.Login(_username, _password);//Should not execute at this point yet
var loginSuccessfull = someTaskInMyViewModelBase(serviceCall);
}
我的目标是,每个继承viewmodelbase的视图模型都可以通过这种通用方法传递其serviceCalls。 Viewmodelbase中有一个IsBusy属性,它绑定到视图上的忙指示符。我不喜欢在调用服务之前将其实现为Isbusy = true,并且在调用完成后将IsBusy = false。如果我在viewmodelBase中有一个通用服务方法,我可以将它粘贴在那里,它将自动为任何viewmodel工作:这与在viewmodelbase中存储错误相同。我想在这个通用方法中处理它。任何想法或建议?
如果你想运行任何等待的。
你可以做那样的事情
private async Task<T> RunTask<T>(Task<T> task)
{
T result = await task;
return result;
}
现在你可以在T result = await task;
之前和之后做任何你想做的事。