代码之家  ›  专栏  ›  技术社区  ›  BR75

这两个异步函数的区别

  •  1
  • BR75  · 技术社区  · 7 年前

    你好,我不明白下面两个asnyc函数的区别,有人能给我解释一下吗?它们都不返回IRestResponse,因此我无法访问StatusCode字段。我必须在这里铸造吗?

    public async Task<IRestResponse> Post<T>(string Ressource, T ObjTOPost) where T : new()
    {
        return await Task.Factory.StartNew(() =>
        {
            var client = new RestClient("test.com");
            var request = new RestRequest(Ressource, Method.POST);
    
            var response = client.Execute(request);
    
            return response;
        });
    }
    

    还有这个:

    public async Task<IRestResponse> Post<T>(string Ressource, T ObjTOPost) where T : new()
    {
        var client = new RestClient("test.com");
    
        var request = new RestRequest(Ressource, Method.POST);
    
        var response = await client.ExecuteTaskAsync<T>(request);
    
        return response;
    }
    
    1 回复  |  直到 7 年前
        1
  •  6
  •   John Wu    7 年前

    它们都不返回IRestResponse,因此我无法访问StatusCode字段。

    他们返回一个 Task<IRestResponse> . 您可以通过等待任务获得界面,例如

    var task = Post(resource, objectToPost);
    IRestResponse response = await task;
    

    或在一行中(更常见):

    var response = await Post(resource, objectToPost);
    

    这两个异步函数的区别

    第二个例子要简单得多。第一个示例旋转一个额外的任务,并将其可等待的任务传递回调用者,而第二个示例直接等待restclient。在第一个示例中,我看不到使用该结构的原因。