Pein
Pein

Reputation: 443

does not contain definition for Content.ReadAsStringAsync() when using web client call

this is my service

public Task<NewsModel> GetNews(string query,string count)
{
    var task = Task<NewsModel>.Factory
        .StartNew(() => {
            var responseData = "";
            NewsModel list = new NewsModel();
            var client = new HttpClient();
            var uri = "Some URL";
            using (var response = client.GetAsync(uri)) {
                responseData =  response.Content.ReadAsStringAsync();
                list = JsonConvert.DeserializeObject<NewsModel>(responseData);
                list.value.RemoveAll(item => item.image == null);
            }
            return list;

        });

    task.ContinueWith(t => {
    }, TaskContinuationOptions.OnlyOnRanToCompletion);

    task.ContinueWith(t => {
        if (t.Exception == null)
            return;

        var ex = t.Exception.Flatten();

    }, TaskContinuationOptions.OnlyOnFaulted);

    return task;
}

compilation error i am getting the above error when i try to compile can you please tell me how can i use Content.ReadAsStringAsync() in the above functionality

Upvotes: 2

Views: 1987

Answers (1)

Nkosi
Nkosi

Reputation: 247333

Those methods return Tasks so they should be awaited.

using (var response = await client.GetAsync(uri)) {
    responseData = await response.Content.ReadAsStringAsync();
    list = JsonConvert.DeserializeObject<NewsModel>(responseData);
    list.value.RemoveAll(item => item.image == null);
}

In fact that entire method should be refactored to use async/await

HttpClient client = new HttpClient();
public async Task<NewsModel> GetNews(string query, string count) {
    NewsModel list = new NewsModel();
    var uri = "Some URL";
    using (var response = await client.GetAsync(uri)) {
        var responseData = await response.Content.ReadAsStringAsync();
        list = JsonConvert.DeserializeObject<NewsModel>(responseData);
        list.value.RemoveAll(item => item.image == null);
    }
    return list;
}

Upvotes: 3

Related Questions