我做了一些工作的OAuth,在這裏我得到我的刷新令牌通過提供異步API方法(GetRefreshTokenAsync):獲取異步結果死鎖(儘管設置配置等待爲false)
public async Task<Tokens> RenewAuthentication()
{
AppTokenResult token = await OAuth.GetRefreshTokenAsync("clientid",
"clientsecret",
@"myRefreshToken");
string accessToken = token.AccessToken;
string refreshToken = token.RefreshToken;
return new Tokens(accessToken, refreshToken);
}
如果我把這個就像從一個非異步方法,例如:
public void noAsync()
{
var r = RenewAuthentication();
var x = r.Result;
}
它鎖死應用程序:(如果我刪除第二行(r.Result),那麼它的工作原理,但是這是廢話,因爲我無法獲得。結果我試着讀
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
但通過向GetRefreshTokenAsync()方法添加.ConfigureAwait(false)方法嘗試其方法1之後,它沒有任何區別。
有什麼建議嗎?
所以UI應該工作而結果從沒有收到? – Thulur
這是在什麼平臺上運行?控制檯,WPF,iOS,ASP.NET ...?你爲什麼要從同步方法調用異步方法?建議使用從頭到尾的異步。 – Krumelur
在收到結果時,UI可以工作或不工作。雖然我寧願屏蔽用戶界面,但這不是真正的問題,對吧?問題是整個事情都陷入僵局。 在WinForms上運行。我從窗體加載調用異步。當表單首次加載時,我想讓用戶使用OAuth,以便我可以存儲它們的令牌。 – Prof