这两个异步函数之间的区别

时间:2018-05-22 20:21:33

标签: c# asynchronous async-await

您好我没有区分以下两个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 个答案:

答案 0 :(得分:6)

  

它们都没有返回IRestResponse,所以我无法访问StatusCode字段。

他们返回Task<IRestResponse>。您可以通过等待任务来获取界面,例如

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

或者在一行(更常见):

var response = await Post(resource, objectToPost);
  

这两个异步函数之间的区别

第二个例子更直截了当。第一个示例旋转一个额外的任务并将其等待返回给调用者,而第二个示例直接等待RestClient。我认为没有理由在第一个例子中使用该结构。