从 ASP.NET WEB API 2 调用外部可执行文件时有哪些最佳实践

What are some best practices when calling external executable from ASP.NET WEB API 2

我需要调用用 C++ 编译的外部 *.exe 来自 ASP.NET WEB API 2 使用流程 (System.Diagnostics)

此可执行文件执行一些图像处理工作并使用大量内存。

所以我的问题是是否将我的 API 调用更改为异步。或实现线程会有所帮助,还是无关紧要?

注意:我所有的都是可执行的,所以我不能去 CLI 包装器。

你可以把两者分开。您的 api 是一回事,它需要快速响应才能为客户提供服务。你的图像处理东西不一样。

你可以实现一个排队系统。 api 负责向该队列添加新项目,仅此而已。您可以在单独的 sql table 中跟踪正在执行的任务 运行 比方说。假设您有一个名为 Tasks 的 sql table。您的 api 将数据放入其中,状态为 "Not Running".

其他一些运行在另一台机器上的应用程序完全关注此 table 并负责 运行 为每个项目执行 table。当它开始时,它会将状态更改为 运行,当它完成时,它会完成。你做任何你需要的事。您可以有一个 api 端点获取任务的 ID,这样您的客户端就可以继续调用此端点以查看状态。或者您可以在完成时引发事件,具体取决于您的应用程序需要。

最重要的是,将事情分开,在资源繁重的任务 运行ning 时阻塞 api 没有任何好处。想一想如果您同时启动该过程 5 次会发生什么。您基本上已经杀死了 api。

执行繁重工作的应用程序甚至可以位于单独的计算机上,因此它根本不会影响 api。