ASP.NET任务异步WaitingForActivation

时间:2016-08-22 02:57:10

标签: c# asp.net dotnet-httpclient

我正在尝试向第三方API发送帖子请求并检索UserToken。以下是执行此操作的代码:

        [HttpPost]
        private async Task<string> GetUserToken()
        {
            using (var client = new HttpClient())
            {
                var parameters = new Dictionary<string, string>
                {
                    {"grant_type", "client_credentials" },
                    {"client_id", _clientId },
                    {"client_secret", _clientSecret }
                };
                var content = new FormUrlEncodedContent(parameters);

                var response = await client.PostAsync(_baseUrl, content);
                var responseString = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseString);
                UserTokenModel userToken = JsonConvert.DeserializeObject<UserTokenModel>(responseString);
                Console.WriteLine(userToken.access_token);
                return userToken.access_token;
            }
        }

当我在控制台应用程序中测试它时,它会输出正确的UserToken值。但是,当我调用此方法并在调试器中逐步执行此方法时,将设置Usertoken的值

var userToken = GetUserToken(); Status: WaitingForActivation Method:"{null}" Result:"{Not yet Computed}"

我不确定为什么会发生这种情况,但结果是,在其他方法中使用的值不能设置为正确的值。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

GetUserToken()不会返回用户令牌。它返回Task,表示其结果是用户令牌的异步工作。

实质上,以下代码:

var userToken = GetUserToken();

......毫无意义。

你真正想要的是:

var userToken = await GetUserToken();
// Do something with the token.