我有一個任務想要從建構式類呼叫,但執行起來真的很慢。有沒有辦法強制執行此任務?
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();
我不確定是否有辦法以另一種方式強制它。
我也接受代碼優化的提示或示例。
uj5u.com熱心網友回復:
一般來說,異步作業不適合建構式。理想情況下,建構式應該簡短而快速,幾乎什么都不做——設定一些成員變數,也許做一些引數驗證,就是這樣。
與其嘗試將 I/O 塞進建構式中,不如考慮使用工廠模式。所以你創建了一個工廠,然后它可以使用異步方法創建你想要的型別的實體async Task<MyType> CreateAsync()
。CreateAsync
然后可以GetExchange
自然地(即異步地)呼叫并傳遞exchangeBodyList
和exchangeTest
到建構式中。
uj5u.com熱心網友回復:
您想通過強制 API 呼叫完成什么目的?就像大多數事情一樣,服務器會在執行完所有操作后給出回應,而不是之前。提前強制結果的唯一方法是關閉連接而不是等待答案。如果您只是希望它加快速度并更快地完成,那么您需要加快服務器端代碼和任何資料庫呼叫的速度。
就像在任何程式中一樣,沒有辦法強制代碼運行得更快。你不能讓計算機運行得更快。您可以強制它以更高的優先級運行執行緒,但我很確定這不會產生太大的速度差異,而且它可能不是您需要運行代碼的格式。
除非您有實際的、特定的錯誤或要修復的問題,否則加速代碼并不是真正的主題,但一般的“加速我的代碼”在這里不起作用。它可能是關于Code Review 的主題,也許,但不是在這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391096.html
上一篇:IOS15中未出現UnoPlatformApp跟蹤提示
下一篇:返回列表