이렇게하면됩니다. 조금 단순화 할 수 있습니다 LoginAsync 이미 Task
을 반환하기 때문에
async() => await this.securityService.LoginAsync(register.UserName, register.Password, true)
이
() => this.securityService.LoginAsync(register.UserName, register.Password, true)
로 기록 될 수있다. 항상 작업을 기다릴 때마다 작업을 처리 할 때마다 일정한 일관성이 있습니다. 당신이했던 것처럼이 일을 마무리하는 것은 실제로 해가되지 않습니다. 두 가지 방법이 모두 합리적이라고 생각합니다.
LoginAsync
은 아무런 예외도 발생시킬 수 없으므로 (맘에 든다) 람다가 전혀 필요하지 않습니다. 예외는 일반적으로 비동기 메서드를 호출 할 때 Task
에 저장됩니다. Task
을 ExecuteSimpleQuery
으로 직접 보낼 수 있습니다. LoginAsync
이이 패턴을 따르지 않으면 예외가 너무 일찍 트리거되므로이를 수행 할 수 없습니다.
var loginTask = securityService.LoginAsync(register.UserName, register.Password, true);
var objectStore = await ExecuteSimpleQuery(loginTask);
protected async Task<KeyValuePair<bool, string>> ExecuteSimpleQuery(Task<bool> service)
{
//...
try
{
success = await service;
}
catch (Exception exception)
{
//...
}
//...
}
당신은 말을하여이를 테스트 할 수 있습니다
var loginTask = Task.Run(() => { throw null; });
catch
이 타격을받을 것입니다.
출처
2014-10-19 10:26:02
usr
왜 그렇게 복잡합니까? 누가'ExecuteSimpleQuery'에 로그인 호출을 위임합니까? –
서비스 기반 아키텍쳐를 사용하여 나는 서비스를 호출하는 정말 일관된 방법을 가지고 있습니다. 그래서 항상'try ... catch'를 써야하는 대신, 한번 쓰고 똑같이 처리합니다. 그냥 쉽고 덜 지루해. –