2016-08-22 46 views
0

我想发送一个帖子请求到第三方API并检索UserToken。这是这样的代码:ASP.NET任务异步WaitingForActivation

 [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}"

我真的不知道这是为什么发生,但结果是,在其他方法中使用的值未设置为适当的值。任何帮助将不胜感激!

回答

2

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

从本质上讲,下面的代码:

var userToken = GetUserToken(); 

...是没有意义的。

你真正想要的是:

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