Home > Back-end >  Is there a way to force Task with Http Client API response ? - c#
Is there a way to force Task with Http Client API response ? - c#

Time:12-22

I have a task who want to call from the constructor class but it's really slow for executing. Is there a way to force this task ?

private async Task GetExchange()
    {
        NewsStack.IsVisible = false;
        SearchStack.IsVisible = false;
        ExchangeStack.IsVisible = true;
        try
        {
            var client = new HttpClient();
            var request = new HttpRequestMessage
            {
                Method = HttpMethod.Get,
                RequestUri = new Uri("https://coinlore-cryptocurrency.p.rapidapi.com/api/tickers/?start=0&limit=100"),
                Headers =
                {
                    { "x-rapidapi-host", "coinlore-cryptocurrency.p.rapidapi.com" },
                    { "x-rapidapi-key", "yourAPIkey" },
                },
            };
            using (var response = await client.SendAsync(request))
            {
                var exchange = new Exchange();
                response.EnsureSuccessStatusCode();
                var body = await response.Content.ReadAsStringAsync();
                var exchangeBody = JsonConvert.DeserializeObject<Exchange>(body);
               
                exchange = exchangeBody;

                this.exchangeBodyList = new List<SearchCrypto>();

                foreach (var item in exchange.CryptoExchange)
                {
                    this.exchangeBodyList.Add(new SearchCrypto()
                    {
                        Name = item.Name,
                        Symbol = item.Symbol
                    });
                }

                this.exchangeTest = exchange;
                
                lstExchange.ItemsSource = exchangeBody.CryptoExchange;
            }

            dateTimeRefresh.Text = "Last Update: "   DateTime.Now.ToString("HH:mm:ss");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Alert", "Please, check your internet connection.", "OK");
        }
    }

I call this task in constructor like that:

Task.Run(() => this.GetExchange()).Wait();

I'm not sure if there's a way to force it in another way.

Also I accepting tips or examples for code optimization ?

CodePudding user response:

What point are you trying to accomplish by forcing the API call to finish? Just like most things, the server will give a response when it's performed all it's operations, not before. The only way to force the result early is to close the connection and not wait for an answer. If you just want it to speed up and finish quicker, then you'll need to speed up the server side code and any DB calls.

Just like in any program, there's no way to force code to run faster. You can't make the computer run faster. You can force it to run a thread at a higher priority, but I'm pretty sure that's not going to make much speed difference and it's probably not the format you need the code to run in.

Speeding up code isn't really on topic here, unless you have an actual, specific error or issue you want to fix, but a general "speed up my code" doesn't work here. It might be on topic on Code Review, maybe, but not here.

  • Related