use*_*369 1 c# generics task mvvm viewmodel
我有一个继承自 ViewModelBase 的 ViewModel。目前我在 ViewModel 中调用我的服务,如下所示:
private void Login(string _username, string _password)
{
Task.Run(async () =>
{
var isLoginSuccess = await _authenticationDataService.Login(_username, _password);
if (isLoginSuccess == true) { }
});
}
Run Code Online (Sandbox Code Playgroud)
在我的 AuthenticarionService 中,它看起来像这样:
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
}
Run Code Online (Sandbox Code Playgroud)
现在我想要的是在我的 ViewModelBase 中放置一个通用的 Task 方法,它将运行我传递给它的任何“awaitables”并返回一个通用结果(我可以在我的视图模型中正确地转换结果)。
这样我就可以做这样的事情:
private void Login(string _username, string _password)
{
var serviceCall = _authenticationDataService.Login(_username, _password);//Should not execute at this point yet
var loginSuccessfull = someTaskInMyViewModelBase(serviceCall);
}
Run Code Online (Sandbox Code Playgroud)
我的目标是每个继承 viewmodelbase 的 viewmodel 都可以使用这个通用方法来传递它们的 serviceCalls。Viewmodelbase 中有一个 IsBusy 属性,它绑定到视图上的繁忙指示器。我不喜欢在调用服务之前将其实现为 Isbusy = true ,在调用完成后将其实现为 IsBusy = false 。如果我在 viewmodelBase 中有一个通用服务方法,我可以将其粘贴在那里,它将自动适用于任何 viewmodel:这对于在 viewmodelbase 中存储错误是相同的。我想用这个通用方法来处理这一切。有什么想法或建议吗?
小智 5
如果你想运行任何可等待的。
你可以做类似的事情
private async Task<T> RunTask<T>(Task<T> task)
{
T result = await task;
return result;
}
Run Code Online (Sandbox Code Playgroud)
现在您可以在之前和之后做任何您想做的事情T result = await task;。
| 归档时间: |
|
| 查看次数: |
4011 次 |
| 最近记录: |