我有一個運行到瓶頸的WebAPI webservice,每當有很多請求獲得一個長時間運行的數據庫操作時,所有其他請求都會比正常時間更長。如何檢查任務線程是否被阻止
的web服務具有每個終點如下:
var result = await Task.Run(() =>
{
return _coordinator.GetValue(key);
});
return Request.CreateResponse(HttpStatusCode.OK, result);
其中_coordinator被類通過構造,將調用一個服務(非web服務),將從數據庫讀取數據注射(長期運行)。 _coordinator可能會調用幾個長時間運行的服務調用,這些服務調用又會從數據庫中獲取。
從我的理解,Task.Run將創建一個任務,將在線程池中的線程中運行。但我不確定這些線程是否在被釋放時被阻塞。
所以我想讓線程運行協調器代碼,看看它是否被阻塞或者它是否被釋放到線程池直到機器服務返回。
線程是一個充足的資源。你不太可能受到線程數量的限制。聽起來像你的數據庫只是超載。優化查詢。 – usr
_coordiantor是第三方還是你自己的? –
_coordinator是我們自己的班級。這是一個傳遞。它稱中間件服務從Oracle數據庫提取。 – abug