【发布时间】:2022-01-23 03:53:14
【问题描述】:
我有一个任务想从构造函数类调用,但执行起来真的很慢。有没有办法强制执行此任务?
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");
}
}
我在构造函数中这样调用这个任务:
Task.Run(() => this.GetExchange()).Wait();
我不确定是否有办法以另一种方式强制它。
我也接受代码优化的提示或示例。
【问题讨论】:
-
请注意,如果这些是真正的 API 凭证,请立即获取新凭证。你永远不想发布这些信息。
-
我更新了问题。
-
@BenJohnson,它仍在公开可见的编辑历史中,所以你仍然需要获得新的信誉。
-
强制什么?为什么慢?是你的服务器吗?互联网连接?客户端的处理时间?除非您知道流程的哪个特定部分很慢,否则您无法修复“慢”。此外,从构造函数调用异步代码也不是一个好主意。您可以通过多种替代方法来执行此操作 - 例如,在页面中使用
async OnAppearing调用。
标签: c# http xamarin async-await httpclient