2016-08-17 2 views
0

私はプロパティを持っています。ゲッターでは、私は非同期メソッドを呼び出したい。たぶんC#でのプロパティの非同期

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

は、問題を解決することができます

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

[ゲッターまたはセッターから非同期メソッドを呼び出す方法は?](http://stackoverflow.com/questions/6602244/how-to-call-an-async-method-from-a-getter) -or-setter) – Sinatr

+0

あなたの問題について別の方法を考えてみましょう。期限切れになるまで何も何も 'AuthToken'を呼び出さないのでしょうか?現在のプロパティベースのソリューションでは、有効期限が切れる直前にその5分間のウィンドウでコールが行われることを前提としています。 IMOでは、リフレッシュループを持つ方が適切です。 –

答えて

0

- :私もコメントをマークしているコードに見てください?

+0

私はそれを非同期に実行する必要があるので、私の問題を解決することはできません。 –

+0

私は60分後に自動的にトークンを生成するスレッディングを使うべきです。 –

関連する問題