ASP中的长阻塞while循环.NET MVC Web API应用程序
本文关键字:MVC NET Web API 应用程序 循环 while ASP | 更新日期: 2023-09-27 18:08:51
第三方产品供应商给了我一个任务的Perl脚本实现。我的工作是把它翻译成ASP。. NET MVC5 web应用。
perl脚本的一个组件是一个while循环,其中包含以下内容:
### Only run this task every second, that's plenty
sleep 1;
基本上它们在一个while循环中每隔1秒做一些事情(伪代码):
While (condition)
{
-go get an m3u8 playlist file from the web
-parse it line by line
-look for a particular thing in it
-If you find it, break out of this loop and do stuff with it
}
通常需要20-30次尝试(20-30秒)才能找到东西。
这是异步编程与async和await是面向还是这是一个只是不应该在一个web应用程序?
该流程将通过ajax对Web API的调用公开。如果可行,是否有人可以提供一些伪代码,说明如何在不阻止应用程序的情况下工作?
如果它是可行的,有人可以提供一些伪代码如何在不阻止应用程序的情况下工作?
AJAX调用总是非阻塞的。您不需要在服务器端为此做任何特别的操作。
我建议使用async
/await
,这样您就不会耗尽ASP。. NET线程休眠:
public async Task<MyResult> GetThing()
{
While (condition)
{
-go get an m3u8 playlist file from the web
-parse it line by line
-look for a particular thing in it
-If you find it, break out of this loop and do stuff with it
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
但请注意,async
仅用于释放ASP上的线程。. NET服务器端。它对客户端没有任何影响。客户端进行AJAX调用,并异步处理完成,而不考虑服务器的实现。
你可以使用async/await,但这更多的是关于同步异步行为。你的问题有点不同,你有一个长时间运行的进程,你不能阻止,所以你需要一种方法来触发它启动,提供更新,然后处理完成。你可以用signalR来表示
如果你想使用ajax,那么像你的API…
StartJob() -> return GUID
JobStatus(guid) -> either, InProgress ( % complete if you can), Final Result, or Error
然后是客户端,启动它,然后轮询状态直到完成。
实现方面,你只需要启动一个任务并将其存储在与GUID关联的缓存中。
如果你想要花哨的裤子,你可以使用像Microsoft Orleans或Akka这样的东西来做处理。