NewbieQ:想知道C#異步/等待服務器端異步最佳實踐
我有現在的時間過長,完成導致超時錯誤的服務器端AJAX請求處理。
處理程序調用一個方法:
public bool Run(Guid jobId) // returns true if successful in running jobId
運行作業交替IO那麼勢必CPU綁定操作的順序,在重要的情況下。
理想情況下,我希望能夠啓動運行,然後不時地查詢運行狀態,然後得到結果(運行返回的布爾值)。
當編寫服務器端代碼來執行此操作時,最佳做法是什麼?
我可以像這樣寫一個包裝嗎?
public async Task<bool> RunAsync(Guid jobId) {...}
如果是這樣,那怎麼稱爲非異步運行?
或者我需要做一個完整的重新編寫的運行方法?最終,我從ajax請求處理程序調用此方法,所以我需要返回作業結果,或者我可以更改請求,然後啓動作業,然後不時查詢具有{bool resultReady,布爾?結果}或者像這樣的結構。
如果您有多個可以並行運行的進程,async/await會很有幫助。如果這是一個正在運行並超時的單個進程,那麼異步/等待將不會對您有所幫助。聽起來更像是你應該有另一個進程,比如控制檯應用程序,它接收到一個通知來開始這項工作。控制檯應用程序不會像Web請求那樣超時,但您必須輪詢結果。或者,您可以考慮增加IIS/ASP.NET超時之前的時間.https://stackoverflow.com/questions/2414441/how-to-increase-request-timeout-in-iis。 – ps2goat
瞭解,但是這是運行在一個Web服務上,其他用戶有其他事情要做,甚至要求這個任務的用戶可能希望在等待結果時做其他事情。我真正擔心的是,Web服務本身正在等待任務完成爲同步任務。 –
@ ps2goat這是不正確的。 await對管理異步操作很有用。這些操作是否並行工作並不重要。 – Servy