C# 如何从父类调用异步任务?
今天我需要你的帮助来调试我的代码。。。事实上,我需要使用Task对象进行API调用,但它不起作用 执行get/post/put请求的RestClient:C# 如何从父类调用异步任务?,c#,asp.net,task,C#,Asp.net,Task,今天我需要你的帮助来调试我的代码。。。事实上,我需要使用Task对象进行API调用,但它不起作用 执行get/post/put请求的RestClient: public class RestClient { public HttpClient HttpClient { get; set; } public RestClient() { if(HttpClient == null) { HttpClient = ne
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.Geturl的返回。你知道我怎样才能解决这个问题吗
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方法是异步的,因此必须以某种方式等待结果。最好的方法是使用wait。这意味着您的Geter方法也需要是异步的,它的调用者需要等待,等等
还要注意,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];
}
在这种情况下,显然不必将Geter更改为异步方法
但我强烈反对这样做。当正确使用时,async/await模式将编织在整个代码中,并将使所有的代码都更加UI友好和易于编写。发布代码时,请确保突出显示它并按{}按钮,以确保其格式正确。为什么CarEnergy从RestClient继承?CarEnergy让rest客户端将其存储在变量中是否更有意义?结果定义在哪里?
var myTask = Get(url).Result;