您的位置:首页 > 编程语言 > C#

c# 线程中任务Task的实际运用

2014-01-01 14:27 447 查看
应用场景:如果两个函数执行没有先后关系,以及不存在彼此依赖,那么可以在后台开启线程任务让他们同步执行,这样可以节省不少时间。

请看下面例子:

[TestMethod()]
        public void test()
        {
            var d = DateTime.Now;
            var msg = "同步运行...";
            run1();
            msg += "\nrun1:" + (DateTime.Now - d).TotalMilliseconds + "ms";
            run2();
            msg += "\nrun2:" + (DateTime.Now - d).TotalMilliseconds + "ms";
            msg += "\n总时间:" + (DateTime.Now - d).TotalMilliseconds + "ms";
            msg += "\n开启Task后...";
            d = DateTime.Now;
            Task<bool> checkHotelTask = Task.Factory.StartNew<bool>(() => run1());
            Task<bool> checkFlightTask = Task.Factory.StartNew<bool>(() => run2());

            if (checkHotelTask != null)
            {
                checkHotelTask.Wait();
            }
            if (checkFlightTask != null)
            {
                checkFlightTask.Wait();
            }

            if (checkHotelTask != null)
            {
                bool v1 = checkHotelTask.Result;
            }
            if (checkFlightTask != null)
            {
                bool v2 = checkFlightTask.Result;
            }
            msg += "\n总时间:" + (DateTime.Now - d).TotalMilliseconds + "ms";
        }

        private bool run1()
        {
            for (int i = 0; i < 10000; i++)
            {
                for (int j = 0; j < 10000; j++)
                {

                }
            }

            return true;
        }

        private bool run2()
        {
            for (int i = 0; i < 10000; i++)
            {
                for (int j = 0; j < 10000; j++)
                {

                }
            }

            return true;
        }


执行后效果如下:

msg:

同步运行...

run1:265ms

run2:528ms

总时间:528ms

开启Task后...

总时间:327ms

不过如果内部函数抛出异常的话,task是不太能捕获到异常信息的,需要手工处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐