我需要调用用C ++编译的外部* .exe 从ASP.NET WEB API 2使用Process(System.Diagnostics)
此可执行文件执行一些图像处理工作并占用大量内存。
所以我的问题是是否将我的API调用更改为Async。或实现线程会有所帮助,还是没关系?
注意:我拥有的所有文件都是可执行文件,因此我无法使用CLI封装程序。
答案 0 :(得分:0)
您可以将两者分开。您的api是一回事,它需要快速,响应以能够为客户提供服务。您的图像处理功能有所不同。
您可以实现一个排队系统。 api负责将新项目添加到此队列,仅此而已。您可以在一个单独的sql表中跟踪正在运行的任务。假设您有一个名为Tasks的sql表。您的api将数据夹在那里,状态为“未运行”。
驻留在另一台计算机上的其他某些应用程序完全监视该表并负责为每个项目运行该可执行文件。启动后,它将状态更改为“正在运行”,完成后将其更改为“完成”。您可以做任何您需要做的事情。您可能有一个采用任务ID的api端点,因此您的客户端可以继续调用该端点以查看状态。或者,您可以根据应用程序的需求在事件完成后引发一个事件。
最重要的是,让事情分开,在执行资源繁重的任务时,阻止api不会获得任何收益。想想如果您同时启动该过程5次会发生什么情况。您基本上已经杀死了api。
繁重的应用程序甚至可能位于单独的计算机上,因此完全不影响api。