【发布时间】:2016-12-23 23:39:15
【问题描述】:
快速背景。在我构建的类库中使用了 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();
}
【问题讨论】:
-
对于那些寻求解决这个问题的人,我找到了对我有用的方法here