C# 即使我立即得到返回任务的结果,HttpClient是否会旋转一个新线程?

C# 即使我立即得到返回任务的结果,HttpClient是否会旋转一个新线程?,c#,asp.net,async-await,dotnet-httpclient,C#,Asp.net,Async Await,Dotnet Httpclient,在我的应用程序中,我喜欢尝试保持一致性,尽可能地使用HttpClient。但是,有时我不需要HttpClient的异步属性,因此我只需在返回任务后立即获得任务的结果,如下面的代码所示 public HttpResponseMessage httpPostWrapperMethod(string postBody, string url) { HttpContent content = new StringContent(postBody, Encoding.UTF8, "applicat

在我的应用程序中,我喜欢尝试保持一致性,尽可能地使用HttpClient。但是,有时我不需要HttpClient的异步属性,因此我只需在返回任务后立即获得任务的结果,如下面的代码所示

public HttpResponseMessage httpPostWrapperMethod(string postBody, string url)
{
    HttpContent content = new StringContent(postBody, Encoding.UTF8, "application/json");

    HttpClient client = new HttpClient();

    return client.PostAsync(url, content).Result;
}
我的问题分为两部分:

此代码是否会导致在调用时在后台旋转新线程


如果我对另一个服务的调用大约需要500毫秒,当该服务的生产负载大约为每秒100个请求时,这是否会导致我消耗太多线程?

PostAsync不会导致创建线程,不。事实上,如果代码是异步使用的,那么任何线程都不需要做任何事情来完成这项工作。在本例中,当前线程在等待操作完成时无所事事,因此这是执行此操作时唯一消耗/浪费时间的线程。

PostAsync不会导致创建线程,事实上,如果代码是异步使用的,那么任何线程都不需要做任何事情来完成这项工作。在您的例子中,当前线程在等待操作完成时无所事事,因此这是执行此操作时唯一消耗/浪费时间的线程。

请查看my上的文章。查看my上的文章。这个答案很有意义。你愿意评论问题的第二部分吗?@我不可能知道我不知道在未知硬件上运行的、服务器负载未知的代码是否会成为问题。我明白了,你必须对自己进行基准测试才能找到答案。对于如何更改此包装器以防止应用程序成为线程绑定的应用程序,您是否有一个简单的体系结构建议?我非常感谢您的建议,因为网上有很多关于如何在ASP中异步处理web请求的信息。您必须仔细阅读其中的一些内容。@EdSF当您同步等待它完成时,是的。这个答案是有意义的。你愿意评论问题的第二部分吗?@我不可能知道我不知道在未知硬件上运行的、服务器负载未知的代码是否会成为问题。我明白了,你必须对自己进行基准测试才能找到答案。对于如何更改此包装器以防止应用程序成为线程绑定的应用程序,您是否有一个简单的体系结构建议?我非常感谢您的建议,因为网上有很多关于如何在ASP中异步处理web请求的信息。您必须查看其中的一些。@EdSF当您同步等待它完成时,是的。