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

使用C#多线程提高系统响应能力举例

2017-08-22 17:55 267 查看
业务需求

1.当后端接口接受用户请求的时候,可能需要保存到多个地方(可能去写缓存,去入实体库)。

假设从Client接受到data 需要保存到DB1,DB2,DB3

保存时间:DB1>DB2>DB3

下面举个例子

假设保存DB1失败,DB2成功,DB3成功。当程序检测到有任何一个保存成功的时候,就立马提示用户保存成功,提高系统反应速度。

   Console.WriteLine("开始接收到数据……");

            object obj = new object();//加锁对象

            bool reslut = false;//添加标识

            Task<bool> t1 = Task.Factory.StartNew(() =>

            {

                Console.WriteLine("保存到DB1");

                if (!reslut)//只有reslut = false才执行,防止标识被覆盖

                {

                    lock (obj)

                    {

                        reslut = false;//假设保存到DB1失败

                    }

                }

            

                return reslut;

            });

            Task<bool> t2 = Task.Factory.StartNew(() =>

            {

                Thread.Sleep(100);

                Console.WriteLine("保存到DB2");

                if (!reslut)//只有reslut = false才执行,防止标识被覆盖

                {

                    lock (obj)

                    {

                        reslut = true;//假设保存到DB2成功

                    }

                }

       

                return reslut;

            });

            Task<bool> t3 = Task.Factory.StartNew(() =>

            {

                Thread.Sleep(200);

                Console.WriteLine("保存到DB3");

                if (!reslut)//只有reslut = false才执行,防止标识被覆盖

                {

                    lock (obj)

                    {

                        reslut = true;//假设保存到DB3成功

                    }

                }

                return reslut;

            });

            while (!reslut)

            {

                if (t1.IsCompleted&&t2.IsCompleted&& t3.IsCompleted)

                {

                    break;

                }

                Thread.Sleep(2);

            }

            if (reslut)

            {

                Console.WriteLine("保存成功");//这时就可以提示用户保存成功

            }

            else

            {

                Console.WriteLine("保存失败");

            }

            Console.ReadKey();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: