[英]How to call async Task<List<>> class in another class?
[英]How to call async task from parent class?
今天,我需要您的幫助來調試我的代碼...確實,我需要使用Task對象來進行API調用,但是它不起作用。
我的RestClient執行我的get / post / put請求:
public class RestClient
{
public HttpClient HttpClient { get; set; }
public RestClient()
{
if(HttpClient == null)
{
HttpClient = new HttpClient();
}
}
protected async Task<string> Get(string url)
{
// Call url in thread
HttpResponseMessage response = await HttpClient.GetAsync(url);
// Get content
var content = await response.Content.ReadAsStringAsync();
return content;
}
}
這個問題在這里,我無法獲得base.Get(url)的返回。 你知道我該怎么解決嗎?
class CarEnergy : RestClient
{
public CarEnergy Geter(int id)
{
string url = String.Format(Configuration.Configuration.GetCarEnergy, id);
Debug.WriteLine(url);
// Wait the get request before continue
var myTask = base.Get(url); // Impossible to get the return, it bug
Debug.WriteLine(result);
var carEnergy = JsonConvert.DeserializeObject<List<CarEnergy>>(result);
return carEnergy[0];
}
}
您的Get()
方法是async
,因此您必須以某種方式等待結果。 最好的方法是使用await
。 這意味着您的Geter()
方法也需要async
,其調用方需要await
,依此類推。
還要注意, Get()
方法既不是虛擬的也不是隱藏的,因此您不需要使用base
來調用它。
解決以上問題,結果如下所示:
public async Task<CarEnergy> Geter(int id)
{
string url = String.Format(Configuration.Configuration.GetCarEnergy, id);
Debug.WriteLine(url);
// Wait the get request before continue
var myTask = await Get(url);
Debug.WriteLine(result);
var carEnergy = JsonConvert.DeserializeObject<List<CarEnergy>>(result);
return carEnergy[0];
}
如果需要,可以通過簡單地獲取Result
屬性而不是使用await
來阻止async方法:
var myTask = Get(url).Result;
(在這種情況下,顯然您不必將Geter()
更改為async
方法)。
但是我強烈不鼓勵這樣做。 如果使用正確,則async
/ await
模式將在您的整個代碼中交織在一起,並使所有這些對用戶界面更友好,更易於編寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.