此異步處理程序的MSDN example使用ThreadPool.QueueUserWorkItem啓動新線程。在異步處理程序中使用Threadpool.QueueWorkItem
我認爲你不應該使用ThreadPool.QueueUserWorkItem來啓動新的線程,因爲線程是從ASP.net線程池中取得的,並且會破壞使用異步處理程序的目的。
這個例子錯了嗎?
此異步處理程序的MSDN example使用ThreadPool.QueueUserWorkItem啓動新線程。在異步處理程序中使用Threadpool.QueueWorkItem
我認爲你不應該使用ThreadPool.QueueUserWorkItem來啓動新的線程,因爲線程是從ASP.net線程池中取得的,並且會破壞使用異步處理程序的目的。
這個例子錯了嗎?
有幾件事情錯了你的斷言:
ThreadPool.QueueUserWorkItem
你不開始一個新的線程。這是讓ThreadPool擺在首位的關鍵。您正在重用池中的線程。當 執行的託管應用程序,運行時提供的 線程,這將是一個游泳池創建了代碼訪問它的第一個 時間。該池 與物理 過程,其中應用程序是運行 ,當你 使用可用的功能 在.NET基礎架構來運行 多個應用程序的一個重要的細節相關的(稱爲 應用程序域)同 過程中。如果是這種情況,則一個不好的 應用程序可能會影響其餘 以內的其他程序,因爲它們全都使用 相同的池。
可以使用線程池或 通過 檢索有關它的信息類的線程池,在 的System.Threading命名空間。如果你 看看這個類,你會 看到所有的成員是靜態的 並沒有公共構造函數。 這是有道理的,因爲每個進程只有一個泳池 ,我們不能 創建一個新池。這 限制的目的是集中在同一 池中的所有 異步編程,這樣我們就沒有 第三方組件,創建一個 平行池,我們不能管理 ,其主題是降低我們的 性能。
所以不,這個例子沒有錯。這個例子非常好,並且精確地表明瞭它的意圖。