快速背景。在我构建的类库中使用了 Flurl,以简化与云存储 api 通信的代码。从用于测试所有方法的控制台应用程序调用库时效果很好。当尝试通过简单的 winform 使用完全相同的类库时,使用控制台应用程序快速返回的相同方法现在似乎永远不会返回结果。调试时,下面的代码会到达“.GetAsync()”行,然后永远不会返回结果,还会阻止调试会话继续。不会抛出任何错误消息。
我在 Flurl 网站上发现有人似乎遇到了同样的问题,但是他们似乎没有按照建议在此处发布问题。任何可以为我指明正确方向的事情都将不胜感激。
包裹在异步方法中的 Flurl 代码
public async Task<AccountInfo> Authorize()
{
string credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(Utils.ToNonSecureString(accountId) + ":" + Utils.ToNonSecureString(applicationKey)));
var result = await B2UrlType.Authorize
.WithHeader("Authorization", "Basic " + credentials)
.GetAsync()
.ReceiveJson<AccountInfo>();
return result;
}
完美运行的控制台应用调用代码
if (client == null)
{
var vault = new Vault();
Console.WriteLine("Retrieving account keys");
client = new Client(vault.GetAccountId(), vault.GetApiKey());
Console.WriteLine("Successfully retrieved account keys");
Console.WriteLine("Created new client");
client.Authorize().GetAwaiter().GetResult();
}
Winform调用代码不返回
private Client client;
public MainWindow()
{
InitializeComponent();
var vault = new Vault();
client = new Client(vault.GetAccountId(), vault.GetApiKey());
client.Authorize().GetAwaiter().GetResult();
}