当前位置: 代码迷 >> C# >> 线程或异步怎么实现这样的功能
  详细解决方案

线程或异步怎么实现这样的功能

热度:32   发布时间:2016-05-05 03:14:19.0
线程或异步如何实现这样的功能
本帖最后由 a853495865 于 2015-07-07 16:51:06 编辑
数据访问层有一个方法,

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);
}
  相关解决方案