我是c#线程的新手,在实现基本任务时需要帮助。 我正在使用下面的代码(不使用线程)运行正常。 这个概念是循环遍历表的记录,在函数中传递一些表参数,除了返回值,然后用返回值更新表。
cmd = new OleDbCommand { Connection = con, CommandText = "Select recid,col_A,col_B from tblData"};
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
cmdRec = new OleDbCommand { Connection = con };
while (dr.Read())
{
sReqResult = DoProcessing(dr["col_A"].ToString(), dr["col_B"].ToString(), dr["PARAM2"].ToString());
sSql = "update tblData set STATUS='" + sReqResult + "' where recid = '" + dr["recid"] + "'";
cmdRec.CommandText = sSql;
cmdRec.ExecuteNonQuery();
}
}
dr.close();
我想使用线程来实现上述功能,以加快进程,以便不是顺序处理记录,而是可以并行运行最多25个线程。但要求是从函数中获取返回值并在表中更新相同的值。 我已经阅读了关于线程池和任务(在.net 4.0中),但我不知道如何实现相同的。请引导我一些示例代码。
答案 0 :(得分:1)
通过这个答案,我暗示你想自己创建异步实现,而不是使用现有的工具/库。
通常,您无法简单地从异步上下文中“返回”一个值。相反,你可以有一个回调,它需要某些“返回”参数(即结果)。
使用threadpool的概念示例:
if (dr.HasRows)
{
object someDataToWorkWith = "data";
Action<object> resultCallback = (theResults) =>
{
// Executed once the workItem is finished.
// Work with and/or present the results here.
};
WaitCallback workItem = (dataOrSomeDetails) =>
{
// This is the main async-part. Work with or fetch data here.
// You can also access any variables from the containing method.
// When finished working, execute callback:
resultCallback("someResults");
};
ThreadPool.QueueUserWorkItem(workItem, someDataToWorkWith);
}
答案 1 :(得分:0)
为什么不使用异步ado.net features?