C# 这两个异步函数之间的区别
您好,我不明白以下两个asnyc函数之间的区别,有人能给我解释一下吗?它们都不返回iRestreponse,因此我无法访问StatusCode字段。我必须在这里投吗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
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绑定调用(网络请求)与第一种方法是同步的