- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用的 Poloniex C# API 代码来自:https://github.com/Jojatekok/PoloniexApi.Net
在我的控制台应用程序上,获取余额的请求正在运行,我调用 API 并返回余额,但在我的 Windows 窗体应用程序上,它没有等待余额:
Id = 14, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
使用此代码时:
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();
}
它与我的控制台应用程序的代码完全相同,但在表单应用程序上任务没有完成,而在控制台应用程序上它正在完成,我正在返回:
Id = 3, Status = RanToCompletion, Method = "{null}", Result = "System.Collections.Generic.Dictionary`2[System.String,Jojatekok.PoloniexAPI.WalletTools.IBalance]"
关于为什么相同的请求没有在我的表单应用程序上完成但它在我的控制台应用程序上有任何提示吗?我正在使用在我的控制台和表单应用程序中引用的完全相同的 Poloniex C# 项目来与 API 交互。
两个项目中的 API 公钥相同,两个项目中的 API 私钥相同。
最佳答案
你不能像这样混合异步和同步代码。通过调用 .Wait
,UI 线程会卡住等待任务完成,但任务本质上是在尝试“调用”UI 线程,因此它无法完成。结果:死锁。
You can see more information about the basic problem here.
一个选项,作为创可贴,是在 await polo_client.Wallet.GetBalancesAsync()
上使用 ConfigureAwait(false)
称呼;这将覆盖尝试返回到 UI 线程的默认行为。 (请注意,这意味着您无法在 await
之后访问 UI,因为它将在不同的线程上继续!)
I have written a longer piece here about bringing async code into the core of a UI application.
关于c# - API请求WaitingForActivation "Not yet computed"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37129427/
我试图找出 async 和 await 关键字的全部内容,但是输出不是我所期望的。 控制台应用如下: class Program { static void Main(string[] arg
我有一个共享 BlockingCollection 的消费者/生产者设置。 public void StartConsumer(CancellationToken cancellationToken)
我有以下功能: async public Task checkNetwork (RestClient _client, ConnectivityManager conn) {
我发现 async 方法有一个非常令人困惑的行为。考虑以下控制台应用程序: private static int _i = 0; private static Task _calculateTask
我试图找出 async 和 await 关键字的全部内容,但是输出不是我所期望的。 控制台应用如下: class Program { static void Main(string[] arg
public void DoStuff() { // I want to be able to call the method DoAsynckStuff and wait for the r
我只有一种 Api Request 方法如下 private async Task getSiteAsync(string siteId) { Site site = null; va
我正在尝试在 VS2012 框架 4.5 的表单上使用异步和等待命令。我的异步方法 SlowMethodAsync 不返回任何内容。请注意,此代码在控制台应用程序中运行良好。 private void
我正在用下面的方式启动 wpf 任务 var newTask = Task.Factory.StartNew(() => { fcStartSubPageCrawl(srMainSiteURL, sr
我正在使用 TaskFactory 使用以下代码启动新任务。 var task = Task.Factory.StartNew(async () => { await Task.Run(()
我已经下载了 EF6 (为了使用 async) 所以我写了这个简单的方法: public async Task> MyasyncMethod() { var loc
我正在尝试发送 url 请求并异步获取响应,但是当我将 .fromAsync 方法与 .ContinueWith 方法一起使用时,任务状态永远不会从 WaitingForActivation 更改为运
我是 HttpClient 的新手。我下面的代码总是在状态中显示“WaitingForActivation”。请帮忙 private static async Task MakeCall() {
我是 C# 中的任务的新手。我正在尝试按照有关将 arm 模板部署到 azure 以启动虚拟机的示例进行操作: https://azure.microsoft.com/en-us/documentat
给定以下代码: Dim t As Date = Now Dim e As New AsynchronousExecutionEventArgs
我是 AWS 的新手,正在尝试设置我的系统以在预订后向最终用户发送 SMS 作为确认消息。 到目前为止,我在下面做了: AmazonSimpleNotificationServiceClient sm
我正在尝试使用 Azure 中的托管身份连接到我的 Key Vault。为此,我在 appsettings.json 的 KeyVault 下的 Vault 下添加了一个带有 Key Vault 名称
我是一名优秀的程序员,十分优秀!