C# 我应该使用异步处理吗?

C# 我应该使用异步处理吗?,c#,service,asynchronous,web,C#,Service,Asynchronous,Web,我有一个Windows服务,它监视表(带有计时器)中的行,在行出现时一次捕获一行,将信息提交给RESTful web服务,分析响应,并将有关响应的一些详细信息写入表。通过使它异步,我会得到什么?我当前(精简)的web服务提交代码如下: HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(new Uri(url)); HttpWebResponse resp; try { resp = (HttpWebResponse)

我有一个Windows服务,它监视表(带有计时器)中的行,在行出现时一次捕获一行,将信息提交给RESTful web服务,分析响应,并将有关响应的一些详细信息写入表。通过使它异步,我会得到什么?我当前(精简)的web服务提交代码如下:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(new Uri(url));
HttpWebResponse resp;
try
{
      resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException we)
{
      resp = (HttpWebResponse)we.Response;
}

if (resp != null)
{
      Stream respStream = resp.GetResponseStream();
      if (respStream != null)
      {
           responseBody = new StreamReader(respStream).ReadToEnd();
      }

      resp.Close();
      respStream.Close();
}

return responseBody;

通过使用异步方法,您无需对异步操作的结果使用专用线程阻塞。您可以释放该线程来处理其他更高效的任务,直到异步任务完成并再次成为高效工作

如果您的服务需求不高,而且您需要做的工作比线程要多,那么您不必担心。对于许多商业应用来说,它们的使用率很低,根本不需要这样做


如果您有一个大型应用程序为足够多的用户提供服务,而您有大量并发请求(即使只是在高峰使用时间),则可能需要切换到异步应用程序。

如果您不关心获得任何单个请求的响应需要多长时间,则不,没有特别的理由使它异步


另一方面,如果在开始下一个请求之前等待一个请求完全完成,则可能在处理大量请求时遇到问题。在这个场景中,您可能希望看到代码的并行化。但是,只有当您将大量项目输入数据库进行处理时,才值得讨论。

如果您不必同时执行某些操作,并且由于用户不参与,则绝对不需要。由于它是一项服务,另一个线程可以完成所需的任何其他活动。如果您能详细说明一些细节,可能有助于获得更全面的答案:您需要在x时间内处理的记录的典型数量是多少?你的程序流程是什么?(也就是说,你是拉一条记录、发出请求、等待响应、更新数据库、获取下一条记录、重复;还是有其他流程?)除非你的windows服务真的在忙着做其他事情,你不想让它等待响应,否则我真的看不到让它异步有什么价值。另一方面,我应该指出WebResponse(以及HttpWebResponse)、Stream和StreamReader都实现了IDisposable,应该予以处置。我理解这不是他询问的服务代码,而是他向服务提交数据并等待响应的客户机代码。不过,关于使用async释放线程直到收到响应的评论仍然有效——只是在客户端通常不如服务器端重要。如果这是服务器,我可能会通过努力。怎么会这样?如果他有一个连接到DB的客户机,获取一个新行并向远程服务发出请求,等待响应并将其保存到数据库,然后获取下一行-这不是一个并行过程。为我们详细说明程序流程可能会有所帮助。编辑-我发誓我刚才回复了一条评论-现在我看起来像个怪人!感谢大家的投入。这就是我一直在寻找的信息。