ViewModelBase에서 상속받은 ViewModel이 있습니다. 현재 나는이처럼 내 ViewModel에 내 서비스를 호출 오전 : 내 AuthenticarionService에서일반 태스크 메서드 구현
private void Login(string _username, string _password)
{
Task.Run(async() =>
{
var isLoginSuccess = await _authenticationDataService.Login(_username, _password);
if (isLoginSuccess == true) { }
});
}
은 다음과 같습니다
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
}
이제 내가 원하는 하나를 실행 일반적인 작업 방법을 넣어하는 것입니다 "awaitables"나는 그것에 전달하고 내 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을 inherites 모든 뷰 모델들이 serviceCalls 전달하기 위해 사용할 수있는이 일반적인 방법을 가지고있다. 뷰의 사용중 표시기에 바인딩하는 ViewModelbase에 IsBusy 속성이 있습니다. 그리고 서비스를 호출하기 전에 Isbusy = true로 구현하고 싶지 않습니다. 호출이 완료된 후 IsBusy = false입니다. viewmodelBase에 일반적인 서비스 메소드가 있다면 거기에 붙일 수 있으며 모든 viewmodel에 대해 자동으로 작동합니다. 이는 viewmodelbase에 오류를 저장하는 것과 동일합니다. 이 일반적인 방법으로 모든 것을 처리하고 싶습니다. 어떤 아이디어 또는 조언?
보기 모델에서 '로그인'이 왜 동기화되어 있습니까? 비동기 코드를 사용하는 경우에는 비동기 적이어야합니다. – poke
'Task'이 이미 제공 한 기능을 정확히 설명하지 않습니까? 귀하의 요구 사항을 감안할 때, 나는 추상화의 또 다른 층이 실제로 필요하다는 것을 알지 못합니다. –
grek40