我需要调用一个用C++编译的外部 *.exe 来自 ASP.NET WEB API 2 using Process (System.Diagnostics(
这个可执行文件做一些图像处理的东西,使用大量的内存。
所以我的问题是,如果我将我的 API 调用更改为异步或实现线程会有所帮助,还是没关系?
注意:我所拥有的只是可执行文件,所以我不能使用 CLI 包装器。
您可以将两者分开。您的 api 是一回事,它需要快速、响应迅速才能为客户服务。你的图像处理是不同的。
您可以实现排队系统。API 负责向此队列添加新项,仅此而已。您可以跟踪在单独的sql表中正在运行的任务。假设你有一个名为 Tasks 的 sql 表。您的 api 将数据放入其中,状态为"未运行"。
位于另一台计算机上的其他应用程序完全关注此表,并负责为每个项目运行该可执行文件。启动时,状态更改为"正在运行",完成后为"完成"。你做任何你需要的。你可以有一个 api 端点,它获取任务的 ID,以便你的客户端可以继续调用这个端点来查看状态是什么。或者,您可以在事件完成后引发事件,具体取决于您的应用程序需求。
最重要的是,保持事情分开,在资源繁重的任务运行时阻止 API 不会获得任何好处。想想如果你同时启动这个过程 5 次会发生什么。你基本上已经杀死了你的 api。
完成繁重工作的应用程序甚至可以位于单独的计算机上,因此它根本不影响 api。