0
情況:用於去耦的異步處理天青Web角色 - Monitor.Wait和線程starvation
- 接收請求
- 地方請求有效載荷到一個隊列:一個高規模天青IIS7應用程序,它必須執行此
- 保持連接到客戶端
- 等待異步過程已完成
- 響應客戶端的通知
請注意,這些將是長時間運行的過程(30秒到5分鐘)。
如果我們在這裏使用Monitor.Wait(...),等待從異步進程到同一個Web應用程序的回調,以調用Monitor.Pa ...()對我們調用Monitor.Wait (),這是否會在短時間內有效地創建線程匱乏?
如果是這樣,該如何緩解?在這裏等待回調是否有更好的模式?例如,我們可以將Response對象放在線程安全的字典中,然後以某種方式讓步,讓回調代碼鎖定Response並繼續響應客戶端?如果是這樣,怎麼樣?
另外,如果異步進程死亡並且從不調用回調,從而不會導致Monitor.Pulse()觸發?我們的線程現在掛了嗎?
爲什麼你不看AsyncPage/AsyncController呢? – astaykov
謝謝。根據你的建議,我們考慮了這一點,這絕對是一條路。我們的新挑戰是Azure主題上的100個併發連接限制,所以我們只需要啓動更多主題。你能做出這個答案嗎?如果你這樣做,我會檢查這個盒子。 –