Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从父类调用异步任务?_C#_Asp.net_Task - Fatal编程技术网

C# 如何从父类调用异步任务?

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

今天我需要你的帮助来调试我的代码。。。事实上,我需要使用Task对象进行API调用,但它不起作用

执行get/post/put请求的RestClient:

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;