Asynchronous 使用HTTPClient的异步调用与使用同步服务任务的直接调用方法的异步调用

Asynchronous 使用HTTPClient的异步调用与使用同步服务任务的直接调用方法的异步调用,asynchronous,async-await,task-parallel-library,dotnet-httpclient,Asynchronous,Async Await,Task Parallel Library,Dotnet Httpclient,我在现有的应用程序中有一个场景,单击Save按钮调用一个Javascript函数。这个javascript函数在内部对Web服务进行4-5次异步调用。此外,我们还面临应用程序中的性能问题。为了减少我们对服务器进行的XHR调用的数量,我们考虑在服务器端整合这些调用,只从Javascript进行一次调用。 在服务器端,我们使用Async Await使此调用异步。因此,我们使用一个方法创建了一个包装器服务,该方法现在使用HTTPClient公开的SendAsync方法调用不同的服务方法。 我们的底层服

我在现有的应用程序中有一个场景,单击Save按钮调用一个Javascript函数。这个javascript函数在内部对Web服务进行4-5次异步调用。此外,我们还面临应用程序中的性能问题。为了减少我们对服务器进行的XHR调用的数量,我们考虑在服务器端整合这些调用,只从Javascript进行一次调用。 在服务器端,我们使用Async Await使此调用异步。因此,我们使用一个方法创建了一个包装器服务,该方法现在使用HTTPClient公开的SendAsync方法调用不同的服务方法。 我们的底层服务都是同步的,为了实现异步功能,我们使用了HTTPClient。我们测量了性能,它显示了相当大的增益。 但是,我们的一位同事指出,我们实际上会有序列化和反序列化的开销,我们现在正在从服务器发起其他webservice调用,这些调用最终将同步运行。所以为什么不直接调用这些方法而不是新的HTTP调用呢。 我们的方法都是同步的,为了使它们异步,我们必须使用任务,这将再次增加开销。 这两种方法都会增加开销,但我们看到,使用async Wait生成新的HTTP请求更符合微服务的概念。 有一场辩论,我想知道其他想法。

我的两分钱:

在服务器端聚合信息的方法很好。 在我看来,只有当您想要连接到遗留服务并且无法直接集成它时,在服务器端内部使用HTTPClient才是一种解决方案。HTTPClient易于使用且健壮,但从技术上讲,它比使用任务(想想错误处理、序列化、测试、网络/套接字资源)的开销要大得多

任务也很好,因为它允许适当的取消,这是HTTPClient无法实现的(HTTPClient只能关闭套接字,另一端仍然可以阻塞资源)

在一般资源方面,使用Futures使任务完美匹配:

没有争论:衡量。虽然除非您创建数百个
任务
s,否则开销可能可以忽略不计。