![](/img/trans.png)
[英]ASP.Net MVC application throws 403 error while making a Web API call
[英]Long blocking while loop in ASP.NET MVC Web API application
第三方產品供應商已為我提供了任務的Perl腳本實現。 我的工作是將其轉換為我的ASP.NET MVC5 Web應用程序。
perl腳本的一個組成部分是一個while循環,其中包含以下內容:
### Only run this task every second, that's plenty
sleep 1;
基本上,它們以1秒的間隔(偽代碼)在while循環中執行操作:
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應用程序中不應該擁有的東西?
該過程將通過對Web API的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之類的方法進行處理。
如果可行,有人可以在不阻止應用程序的情況下提供一些偽代碼,說明其如何工作嗎?
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調用,並異步處理完成,而與服務器的實現無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.