Pro*_*rof 2 c# multithreading deadlock asynchronous async-await
我正在做一些OAuth工作,我通过提供的异步API方法获取刷新令牌(GetRefreshTokenAsync):
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);
}
Run Code Online (Sandbox Code Playgroud)
如果我像非异步方法那样调用它:
public void noAsync()
{
var r = RenewAuthentication();
var x = r.Result;
}
Run Code Online (Sandbox Code Playgroud)
它使应用程序陷入僵局:(.如果我删除第二行(r.Result),那么它可以工作,但那是废话,因为我无法得到结果.我试过阅读
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
但是在通过向GetRefreshTokenAsync()方法添加.ConfigureAwait(false)来尝试他的方法1后,它没有任何区别.
有什么建议?
它使应用程序陷入僵局:(
这就是async在具有自定义同步的环境中对方法进行阻塞的方法.
如果你在"FormLoad"上调用它,则不需要阻止.只需标记您的事件处理程序,async就可以await进行操作:
public Form()
{
this.Load += OnLoadHandler;
}
public async void OnLoadHandler(object sender, EventArgs e)
{
var result = await RenewAuthenticationAsync();
// Store the result here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |