Я исправляю чужой код, когда требуются целые годы, чтобы вернуть полный набор данных в следующем коде:
DataTable dt = someLib.GetDataTable("EXEC [dbo].[CMS_Content_GetAllContents]");
// Copy the DataTable data to list.
foreach (DataRow dr in dt.Rows)
{
ContentInfo aContentDetail = new ContentInfo(
(int)dr["ID"],
(string)dr["ContentName"],
getCategories((int)dr["ID"]),
null,
(string)dr["Publisher"],
(string)dr["Price"],
false);
contentInfoList.Add(aContentDetail); ;
}
private string getCategories(int ContentID)
{
String categories = String.Empty;
String query = String.Format("EXEC [dbo].[CMS_Content_GetContentCategories] @ID = {0}", ContentID);
DataTable dt = clsGlobal.GetDataTable(query);
foreach (DataRow dr in dt.Rows)
{
categories = String.Concat((string)dr["ShortDescription"] + ", ");
}
if (categories.EndsWith(", "))
categories = categories.TrimEnd(new char[] { ',', ' ' });
return categories;
}
Это жалко, так как для DataTable dt более 1000 строк, и я не могу разобратьсяс этим из уровня хранимой процедуры!
Мне просто интересно, могу ли я связать вызов getCategories(int)
в Threadpool.QueueUserWorkItem()
так, чтобы он мог идти параллельно, но не знаю, как вернуть строку обратно вызывающей стороне?
Или это плохая идея использовать Threadpool, потому что я слышал, что рабочие потоки Threadpool не предназначены для длительных запросов, таких как вызовы БД, поскольку поток портов IOCompletion может не возвращаться вовремя, поэтому работники, скорее всего,быть заблокированным из-за этого?
Любая помощь приветствуется.