我有一個C#控制檯應用程序,它處理隊列(以db爲單位)並處理用戶上傳的內容。 它按計劃任務運行。需要時編程運行控制檯應用程序
如果某些用戶刪除了一些內容,則該進程將無法啓動,直到它運行。
如果作業每5分鐘運行一次,則必須等待最多5分鐘的時間才能運行。 我想馬上處理用戶內容。
如果user1刪除內容,然後user2在30秒後刪除內容,我希望運行2個作業的實例。
是否可以觸發從C#代碼(MVC控制器)運行的作業\任務?
我有一個C#控制檯應用程序,它處理隊列(以db爲單位)並處理用戶上傳的內容。 它按計劃任務運行。需要時編程運行控制檯應用程序
如果某些用戶刪除了一些內容,則該進程將無法啓動,直到它運行。
如果作業每5分鐘運行一次,則必須等待最多5分鐘的時間才能運行。 我想馬上處理用戶內容。
如果user1刪除內容,然後user2在30秒後刪除內容,我希望運行2個作業的實例。
是否可以觸發從C#代碼(MVC控制器)運行的作業\任務?
本質上,它聽起來像你只是想執行一個異步操作。取決於.NET的版本,有許多選項。例如,Task Parallel Library是調用異步操作的簡單方法。因此,如果任務被封裝到一些對象(同樣的例子,讓我們說一個方法叫做叫做content
的對象上Process
),那麼它可能是這樣的:
var processContent = new Task(() => content.Process());
processContent.Start();
任務會再繼續異步和流控制將返回到應用程序(這對於不希望用戶無意查看無響應的瀏覽器的Web應用程序尤其理想)。
如果你使用的是.NET 4.5,你也可以使用the async
and await
keywords來讓它更清晰一些。本質上,您正在討論在a separate thread中運行流程。
這一切都假定Web應用程序和控制檯應用程序共享相同的後端業務邏輯代碼。當然,其中的可能是他們應該做的。如果由於某種原因,這不是一個選項(我建議考慮讓它成爲一個選項),你可以從代碼start a process。這可能是簡單的東西如:
Process.Start("C:\Path\To\ConsoleApplication.exe");
雖然分叉所有這些過程都可以看起來很凌亂,可能是非常困難的在錯誤處理/記錄/等方面進行管理。爲什麼最好將邏輯與應用程序保持在同一個進程中的另一個原因,就是在一個單獨的線程中。
我有一個exe(控制檯應用程序),我需要從C#代碼(MVC控制器)kickstart。 「web應用程序和控制檯應用程序共享相同的後端業務邏輯代碼」是什麼意思? – kheya
@kheya:業務邏輯應該在它自己的程序集(類庫項目)中,並且這兩個應用程序都應該在解決方案中引用該程序集。因此,當部署每個應用程序時,它都有自己的業務邏輯代碼副本。 – David