使用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();
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();
相关文章推荐
- 解决Win 7系统中文件夹假死无响应的问题,提高加快反应速度
- 区块链也许有助于防范投票诈骗,提高政府的响应能力
- 如何提高Linux系统应对短连接的负载能力
- 如何提高Linux系统应对短连接的负载能力
- [转]使用OC4J的多JVM来提高系统处理能力
- 提高Linux系统应对短连接的负载能力的方法
- SOC系统应急响应能力浅析
- 提高IIS响应能力
- 提高IIS响应能力
- 提高Linux系统应对短连接的负载能力
- SOC系统应急响应能力浅析
- 使用通用权限管理系统组件的随想 - 提高开发能力、规范开发、快速见效
- 背诵××能提高××能力吗?
- 在多线程/进程环境下,计算系统的总响应时间
- 如何利用扩大课外阅读提高幼儿的语言能力
- [原创] - C#编程大幅提高OUTLOOK的邮件搜索能力!
- Configuration类响应系统设置的事件处置
- 提高嵌入式系统代码执行效率的方法
- 优化Linux下的内核TCP参数来提高服务器负载能力
- 浅谈如何提高服务器并发处理能力