首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

.net4.0 listview与task配合兑现异步查询的功能

2013-09-07 
.net4.0 listview与task配合实现异步查询的功能本帖最后由 bug810 于 2013-08-02 10:10:30 编辑listview代

.net4.0 listview与task配合实现异步查询的功能
本帖最后由 bug810 于 2013-08-02 10:10:30 编辑 listview代码如下:


     <asp:ListView ID="ListView1" runat="server" ItemPlaceholderID="itemPlaceholder" 
            onpagepropertieschanging="ListView1_PagePropertiesChanging">
    <LayoutTemplate>
                    <table style="width:100%;" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#FFFFFF" id="tblCategories">
                    <thead><tr style="background:#E3E3E3; font-weight:bold; text-align:center; height:25px;">
                        <td>
                            货物追踪</td>
                    </tr>
                    </thead>
                    <tbody> 
                       <asp:PlaceHolder runat="server" ID="ItemPlaceHolder"></asp:PlaceHolder> 
                    </tbody>
                    </table> 
     </LayoutTemplate>
    <ItemTemplate>
                    <tr>
                        <td colspan="10">
                            <%# 这里显示查询结果 %>
                                </td>


                    </tr>
    </ItemTemplate>
    </asp:ListView>


查货函数是:


IIS本身就给你开个线程池运行了,你还异步做啥
[解决办法]

  [TestMethod]
        public void TestMethod1()
        {
            //
            // TODO: 在此添加测试逻辑
            //

            var task1 = new Task<TreadObj>(getResult, new TreadObj("type1", "1")); 
            task1.Start();
            var task2 = new Task<TreadObj>(getResult, new TreadObj("type2", "2"));
            task2.Start();
            var task3 = new Task<TreadObj>(getResult, new TreadObj("type3", "3"));
            task3.Start();
            var task4 = new Task<TreadObj>(getResult, new TreadObj("type4", "4"));
            task4.Start();
            var task5 = new Task<TreadObj>(getResult, new TreadObj("type5", "5"));
            task5.Start();


            var task6 = new Task<TreadObj>(getResult, new TreadObj("type6", "6"));
            task6.Start();


            Task.WaitAll(task1, task2, task3, task4, task5, task6);

            Console.Write(string.Format("results:{0}", task1.Result.result 
                + task2.Result.result
                + task3.Result.result
                + task4.Result.result
                + task5.Result.result
                + task6.Result.result
                ));

        }
        public class TreadObj
        {
            public string typeCom;
            public string nu;
            public string result;
            public TreadObj(string _typeCom,string _nu)
            {
                typeCom = _typeCom;
                nu = _nu;
            }
        }
        public static TreadObj getResult(object obj)
        {
            TreadObj hobj = (TreadObj)obj;
            hobj.result = chahuo(hobj.typeCom, hobj.nu);
            return hobj;
        }


        public static string  chahuo(string typeCom, string nu)
        {
            return typeCom+nu;
        }


[解决办法]
有返回值,根据我的见识。
它就没法异步。
就绑定数据而言,asp.net不能是实现异步编程。你看得到界面的时候,生命周期已经结束了。
只能用ajax实现异步。
[解决办法]
引用:
Quote: 引用:


  [TestMethod]
        public void TestMethod1()
        {
            //
            // TODO: 在此添加测试逻辑
            //

            var task1 = new Task<TreadObj>(getResult, new TreadObj("type1", "1")); 
            task1.Start();
            var task2 = new Task<TreadObj>(getResult, new TreadObj("type2", "2"));
            task2.Start();
            var task3 = new Task<TreadObj>(getResult, new TreadObj("type3", "3"));
            task3.Start();
            var task4 = new Task<TreadObj>(getResult, new TreadObj("type4", "4"));
            task4.Start();
            var task5 = new Task<TreadObj>(getResult, new TreadObj("type5", "5"));
            task5.Start();
            var task6 = new Task<TreadObj>(getResult, new TreadObj("type6", "6"));
            task6.Start();


            Task.WaitAll(task1, task2, task3, task4, task5, task6);



            Console.Write(string.Format("results:{0}", task1.Result.result 
                + task2.Result.result
                + task3.Result.result
                + task4.Result.result
                + task5.Result.result
                + task6.Result.result
                ));

        }
        public class TreadObj
        {
            public string typeCom;
            public string nu;
            public string result;
            public TreadObj(string _typeCom,string _nu)
            {
                typeCom = _typeCom;
                nu = _nu;
            }
        }
        public static TreadObj getResult(object obj)
        {
            TreadObj hobj = (TreadObj)obj;
            hobj.result = chahuo(hobj.typeCom, hobj.nu);
            return hobj;
        }
        public static string  chahuo(string typeCom, string nu)
        {
            return typeCom+nu;
        }



请问一下多线程和单线程在执行效率上有区别吗?多线程是不是也并不是说多个线程同时执行,也是有先后顺序的?


对于当个线程处理要比较久的就可以采取多线程并行处理,然后最后合并结果:
比如你单线程要处理5秒,在能分线程的情况下,我分了五个线程可以并行处理,可能就每个线程1秒钟左右,
最后出来处理结果就是1秒钟左右就处理完了。

热点排行