Я обновляю значение в HttpClient Async Method, но это не так, как это сделать с помощью c #? - PullRequest
0 голосов
/ 13 сентября 2018

Примечание: _Этот вопрос относится к _

При вызове асинхронного метода не устанавливается переменная-член

Изначально у меня есть taskAssignedToUserId = 1 , после чего я обновляю taskAssignedToUserId в Асинхронный метод HttpClient , но при выходе из метода я не получаю обновленное значение taskAssignedToUserId.

Код

string taskAssignedToUserId="1";//default value  
public async static void PostRequestUserId(string url, string api_key, string device_token, string device_type, string username)
{  
    IEnumerable<KeyValuePair<string, string>> queries = new List<KeyValuePair<string, string>>()
    {  
        new KeyValuePair<string, string>("username",username),  
        new KeyValuePair<string, string>("api_key",api_key),  
        new KeyValuePair<string, string>("device_token",device_token),  
        new KeyValuePair<string, string>("device_type",device_type)  
    };  
    HttpContent q = new FormUrlEncodedContent(queries);  
    using (HttpClient client = new HttpClient())
    {  
        using (HttpResponseMessage response = await client.PostAsync(url, q))
        {  
            using (HttpContent content = response.Content)
            {  
                var mycontent = await content.ReadAsStringAsync();  
                var jo = JObject.Parse(mycontent);  
                string validApi = jo["Result"]["valid_api"].ToString();  
                try  
                {  
                    if (validApi == "True")  
                    {  
                        taskAssignedToUserId = jo["Result"]["user_id"].ToString();  
                    }  
                    else  
                    {  
                        MessageBox.Show("API is invalid!");  
                    }  
                }  
                catch (Exception ex)  
                {  
                    MessageBox.Show(ex.Message);  
                }  
            }  
        }  
    }  
}  

//function call
MessageBox.Show(taskAssignedToUserId); // updated value  

1 Ответ

0 голосов
/ 13 сентября 2018

Вы должны изменить свой код следующим образом:

public async static Task<int> PostRequestUserId(string url, string api_key, string device_token, string device_type, string username)
{
    //your code
    return id; //insted of setting class variable
}

и в каком-то другом классе в другом методе:

var newId = await MyStaticClass.PostRequestUserId(input_values...);
MessageBox.Show(newId);
...