gpt4 book ai didi

c# - 获取异步结果死锁(尽管将 configure await 设置为 false)

转载 作者:行者123 更新时间:2023-11-30 20:22:27 25 4
gpt4 key购买 nike

我正在做一些 OAuth 工作,我通过提供的异步 API 方法 (GetRefreshTokenAsync) 获取我的刷新 token :

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

但是在通过将 .ConfigureAwait(false) 添加到 GetRefreshTokenAsync() 方法来尝试他的方法 1 之后,它没有任何区别。

有什么建议吗?

最佳答案

It deadlocks the app :(

这就是在具有自定义同步的环境中阻塞 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
}

关于c# - 获取异步结果死锁(尽管将 configure await 设置为 false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31669307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com