2014-10-14 3 views
0

REST API를 사용하여 데이터를 수집하는 Windows Phone 8 앱을 작성 중입니다. API에는 인증이 필요하므로 REST API를 호출 할 때마다 사용자가 인증되었는지 확인해야합니다. 사용자가 인증되지 않은 경우 로그인보기를 표시하고 사용자가 인증하도록합니다. 그것은 HTTP 인증이 아니지만 사용자 정의 로그인 화면을 사용합니다.async-await을 사용하여 다른보기가로드 될 때까지 대기

내 문제는 : 인증을 기다리는 동안 await을 사용하고 싶습니다.하지만 다른 뷰를 가져와야하기 때문에 어떻게 해야할지 모르겠습니다.

LoadData 방법 :

async Task LoadDataAsync() { 
    bool authenticated = await AuthenticateAsync(); 
    if (authenticated) { 
     // do REST API stuff 
    } 
} 

그리고 AuthenticateAsync 방법 : 내가 좋아하는 것

async Task<bool> AuthenticateAsync() { 
    if (alreadyAuthenticated) 
     return true; 
    // not authenticated, so bring up a login view to let the user log in 
    // How do I do this in the context of async-await? 
} 

그래서 AuthenticateAsync의 방법이 제기하는 여기에 내가하고 싶은 것을 위해 의사 코드입니다 사용자가 인증해야하는 경우 로그인보기. 그러나 비동기가 아니기 때문에 NavigationService.Navigate()으로 전화 할 수 없습니다. 친절하기 때문에 기다릴 수 없습니다.

어떻게해야할까요?

+0

왜 'NavigationService.Navigate'가 비동기입니까? 기다리기 전에 기본 "로드 중"보기를 표시 한 다음 로그인 또는 메인보기를 표시해야합니다. – McGarnagle

+0

나는 이해하지 못한다. 그럼 네가 NavigationSeriv.Navigate (...);를 기다릴 수 있다고 말하면서 어떻게 든 인증 결과를 얻는다. 내가 어떻게 그럴 수 있을지 모르겠다. –

답변

1

답변을 찾았습니다. 나는 여기에 대답을 사용하여 끝냈다 : https://stackoverflow.com/a/12858633/225560

특히, 나는 TaskCompletionSource<bool> 개체를 사용했다. 나는 그때 기다릴 수 있었다. 그런 다음 로그인보기로 이동하여 로그인이 성공하면 다시 전화했습니다. 그런 다음 TaskCompletionSource의 결과를 설정하여 대기 상태를 해제하고 메소드를 계속 진행합니다. 이것은 로그인이 완료되었을 때 초기 클래스에서 메소드를 호출하는 Login 뷰가 objective-C에서의 델리게이트처럼 거의 끝내 버렸다.

관련 문제