无需等待结果即可从Web API调用另一个Web API

Gab*_*Roy 5 c# asp.net-web-api

有没有办法Http在我自己的Web API中激活对外部Web API的调用而无需等待结果?

我的场景是我真的不在乎调用是否成功,我不需要该查询的结果.

我目前在我的一个Web API方法中做了类似的事情:

var client = new HttpClient() { BaseAddress = someOtherApiAddress };
client.PostAsync("DoSomething", null);
Run Code Online (Sandbox Code Playgroud)

我不能把这段代码放在一个using语句中,因为在这种情况下调用不会通过.我也不想调用.Result()该任务,因为我不想等待查询完成.

我试图理解做这样的事情的含义.我全身知道这真的很危险,但我不确定为什么.例如,当我的初始查询结束时会发生什么.将IIS处置线程和客户端对象,这会导致查询的另一端出现问题吗?

Dud*_*ord 1

有没有办法在我自己的 Web API 中触发对外部 Web API 的 Http 调用,而无需等待结果?

是的。这就是所谓的“一劳永逸”。不过,你好像已经发现了。

我试图理解做这样的事情的含义

在您上面链接的答案中的链接之一中说明了三种风险:

  1. 与请求无关的线程中未处理的异常将导致进程停止运行。即使您通过 Application_Error 方法设置了处理程序,也会发生这种情况。

这意味着您的应用程序或接收应用程序中抛出的任何异常都不会被捕获(有一些方法可以解决这个问题)

  1. 如果您在网络场中运行站点,则最终可能会出现应用程序的多个实例,这些实例都尝试同时运行同一任务。处理起来比第一个项目更具挑战性,但仍然不是太难。一种典型的方法是使用所有服务器共用的资源(例如数据库)作为同步机制来协调任务。

当您只想接一个电话时,您可能会接到多个“即发即忘”的电话。

  1. 您的网站运行的 AppDomain 可能会因多种原因而关闭,并导致您的后台任务随之停止。如果发生在代码执行过程中,这可能会损坏数据。

危险就在这里。如果您的 AppDomain 出现故障,它可能会损坏发送到其他 API 的数据,从而导致另一端出现奇怪的行为。