Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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#_Asynchronous_Async Await - Fatal编程技术网

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

C# 这两个异步函数之间的区别,c#,asynchronous,async-await,C#,Asynchronous,Async Await,您好,我不明白以下两个asnyc函数之间的区别,有人能给我解释一下吗?它们都不返回iRestreponse,因此我无法访问StatusCode字段。我必须在这里投吗 public async Task<IRestResponse> Post<T>(string Ressource, T ObjTOPost) where T : new() { return await Task.Factory.StartNew(() => { var

您好,我不明白以下两个asnyc函数之间的区别,有人能给我解释一下吗?它们都不返回iRestreponse,因此我无法访问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;
}
它们都不返回iRestreponse,因此我无法访问StatusCode字段

他们返回一个任务。您可以通过等待任务来获得接口,例如

var task = Post(resource, objectToPost);
IRestResponse response = await task;
或者更常见的一行:

var response = await Post(resource, objectToPost);
这两个异步函数之间的区别

第二个例子要简单得多。第一个示例启动一个额外的任务并将其可等待返回给调用方,而第二个示例直接等待RestClient。我认为没有理由在第一个示例中使用该结构

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

他们返回一个任务。您可以通过等待任务来获得接口,例如

var task = Post(resource, objectToPost);
IRestResponse response = await task;
或者更常见的一行:

var response = await Post(resource, objectToPost);
这两个异步函数之间的区别


第二个例子要简单得多。第一个示例启动一个额外的任务并将其可等待返回给调用方,而第二个示例直接等待RestClient。我认为没有理由在第一个示例中使用该结构。

一个区别是,第一个示例将在请求期间无声地抛出异常,而第二个示例则不会。除此之外,我不确定ExecuteTaskAsync内部使用的构造与任务工厂方法之间的确切区别。除此之外,第二种方法更为惯用。阅读IMO要容易得多,也可以直接考虑在示例2中直接返回等待的结果。在第二个过程中,只有异步执行此代码:Client。ExeExtEaskasyCyQuest.;在第一种方法中,一切都是。此外,实际的IO绑定调用-网络请求-与第一种方法是同步的。一个区别是,第一种方法在请求期间会默默地抛出异常,而第二种方法不会。除此之外,我不确定ExecuteTaskAsync内部使用的构造与任务工厂方法之间的确切区别。除此之外,第二种方法更为惯用。阅读IMO要容易得多,也可以直接考虑在示例2中直接返回等待的结果。在第二个过程中,只有异步执行此代码:Client。ExeExtEaskasyCyQuest.;在第一种方法中,一切都是同步的。此外,实际的IO绑定调用(网络请求)与第一种方法是同步的