我使用的是Poloniex C#API代码:https://github.com/Jojatekok/PoloniexApi.Net
在我的控制台应用程序上获取余额的请求正在运行,我进行API调用并返回余额,但在我的Windows窗体应用程序上,它没有等待余额:
Id = 14, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
Run Code Online (Sandbox Code Playgroud)
使用此代码时:
PoloniexClient polo_client { get; set; }
private void Main(){
polo_client = new PoloniexClient(ApiKeys.PublicKey, ApiKeys.PrivateKey);
var balance_task = getLatestWalletAmounts();
balance_task.Wait();
// doesn't get past here on my Forms app
if (balance_task.IsCompleted){
// gets to here on my Console app
}
}
// get wallet and startup amounts
async Task<IDictionary<string, Jojatekok.PoloniexAPI.WalletTools.IBalance>> getLatestWalletAmounts()
{
// get wallet coin list
return await polo_client.Wallet.GetBalancesAsync();
}
Run Code Online (Sandbox Code Playgroud)
它与我的控制台应用程序完全相同,但在Forms应用程序上任务没有完成,在控制台应用程序上它正在完成,我回来了:
Id = 3, Status = RanToCompletion, Method = "{null}", Result = "System.Collections.Generic.Dictionary`2[System.String,Jojatekok.PoloniexAPI.WalletTools.IBalance]"
Run Code Online (Sandbox Code Playgroud)
关于为什么相同的请求没有在我的Forms应用程序上完成但是它在我的控制台应用程序上的任何提示?我正在使用我的控制台和表单应用程序中引用的完全相同的Poloniex C#项目来与API进行交互.
两个项目中的API公钥相同,两个项目中的API私钥相同.
Mar*_*wul 10
你不能像这样混合异步和同步代码.通过调用.Wait,UI线程等待任务完成,但该任务基本上是尝试在UI线程上"调用",因此无法完成.结果:死锁.
作为创可贴的一种选择是ConfigureAwait(false)在await polo_client.Wallet.GetBalancesAsync()通话中使用; 这将覆盖尝试返回UI线程的默认行为.
我在这里写了一篇关于将异步代码引入UI应用程序核心的更长篇幅.
| 归档时间: |
|
| 查看次数: |
18348 次 |
| 最近记录: |