我做了一些工作的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