2016-08-17 6 views
0

속성이 있습니다. getter에서 비동기 메서드를 호출하려고합니다. 코드를 들여다 또한 코멘트를 표시 한하십시오 : -C#의 속성이있는 비동기

public string AuthToken 
{ 
    get 
    { 
     TimeSpan timediff = App.Locator.Login.TokenExpire_On.ToLocalTime() - DateTime.Now.ToLocalTime(); 
     if (timediff.TotalMinutes < 55) 
      App.Locator.Login.GetRefreshToken(); 
     // before return the value i want to complete the work of GetRefreshToken(), GetRefreshToken is a async method. 
     return AppSettings.GetValueOrDefault<string>(AuthTokenKey, AuthTokenDefault); 
    } 
    set 
    { 
     AppSettings.AddOrUpdateValue<string>(AuthTokenKey, value); 
    } 
} 

public async Task GetRefreshToken() 
{ 
    if (string.IsNullOrEmpty(this.AuthToken)) 
     return; 
    AzureRefreshToken refreshToken = await UserProfileService.RefreshToken(this.AuthToken); 
    Settings.AuthToken = refreshToken.RefreshToken; 
    TokenExpire_On = DateTime.Now.AddHours(1); 

} 
+2

가능한 [getter 또는 setter에서 비동기 메서드를 호출하는 방법?] (http://stackoverflow.com/questions/6602244/how-to-call-an-async-method-from-a-getter) - 또는 - setter) – Sinatr

+0

다른 방법으로 문제를 생각해보십시오 : 만료 된 후에 만 ​​'AuthToken'을 호출하지 않으면 어떻게됩니까? 현재 속성 기반 솔루션은 만료되기 직전에 5 분짜리 창에서 전화가 걸릴 것으로 가정합니다. IMO는 새로 고침 루프가 더 적절할 것입니다. –

답변

0

어쩌면

if (timediff.TotalMinutes < 55) 
     App.Locator.Login.GetRefreshToken().RunSynchronously(); 

이 문제를 해결할 수 있습니까?

+0

비동기 적으로 실행해야하므로 내 문제를 해결할 수 없습니다. –

+0

나는 내가 60 분 후에 자동으로 토큰을 생성 할 스레딩을 사용해야한다. –