数据访问层有一个方法,
public void A(PagedResult pr)
{
string sql1="SELECT* from aa";
pr.Result=DBhelper.GetTable(sql1);//其实这个sql是带有分页的,为了省略,不写了。
string sql2="select COUNT(*)FROM aa"
pr.Total=DBhelper.GetScalar(sql2);//这个是获取总页数的。
}
调用上面的方法
public void B()
{
PagedResult pr=new PagedResult ();
A(pr);
OtherMethod();
}
现在是先执行sql1,然后在执行sql2,因为数据比较大,比较慢,所以我想利用 线程或者异步 改写这个功能,一个线程(异步)读取Result,一个线程(异步)读取Total,当 Result 和 Total都读取到了 执行OtherMethod。
我提出这个问题,并不是想 让各位大神 说 合不合理,或者有无风险。
而是希望 各位大神可以给我一个思路,或者可以给我一个实现了类似功能的博客。
小弟在这里不胜感激。
------解决思路----------------------
你创建两个Thread就行了,然后通过委托去把值回传给UI线程
------解决思路----------------------
Parallel.For(0, 2, (i) =>
{
if (i == 0)
{
string sql1 = "SELECT* from aa";
pr.Result = DBhelper.GetTable(sql1);//其实这个sql是带有分页的,为了省略,不写了。
}
else
{
string sql2 = "select COUNT(*)FROM aa";
pr.Total = DBhelper.GetScalar(sql2);//这个是获取总页数的。
}
});
------解决思路----------------------
public void A(PagedResult pr)
{
Task t1 = Task.Factory.StartNew(() =>
{
string sql1="SELECT* from aa";
pr.Result=DBhelper.GetTable(sql1);//其实这个sql是带有分页的,为了省略,不写了。
});
Task t2 = Task.Factory.StartNew(() =>
{
string sql2 = "select COUNT(*)FROM aa";
pr.Total = DBhelper.GetScalar(sql2);//这个是获取总页数的。
});
Task.WaitAll(t1, t2);
}