首页 新闻 会员 周边

C# 后端代码并发处理

0
悬赏园豆:5 [已解决问题] 解决于 2016-12-23 15:09

我现在正在编写一个小系统的后台,是用WebService写的接口,我想请教大神们,如果让多个用户同时处理是不会出现异常,如何列队、并发处理事务,请相信介绍下, 感激不尽。

居~的主页 居~ | 初学一级 | 园豆:28
提问于:2016-10-24 10:05
< >
分享
最佳答案
1

用lock锁

收获园豆:5
心怀宇宙 | 小虾三级 |园豆:643 | 2016-10-24 10:24

@久久小垠: 不是啊,就是把你的代码锁起来,具体的你百度一下,用法很简单,看看能否达到你要的效果、、、

心怀宇宙 | 园豆:643 (小虾三级) | 2016-10-24 10:29
其他回答(3)
0

可以使用消息队列的,并发请求无非是容易导致阻塞问题,如果将请求塞到队列中,按顺序先到先得资源的原理,就可以避免多用户引起的并发问题。

 

~扎克伯格 | 园豆:1923 (小虾三级) | 2016-10-24 10:13

或者用线程处理http://www.cnblogs.com/durow/p/4837746.html

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2016-10-24 10:16

你好,有简单的是实例代码吗?谢谢

支持(0) 反对(0) 居~ | 园豆:28 (初学一级) | 2016-10-24 10:18
0

你framework版本多少?

Daniel Cai | 园豆:10424 (专家六级) | 2016-10-24 10:26

3.5

支持(0) 反对(0) 居~ | 园豆:28 (初学一级) | 2016-10-24 10:35

@久久小垠: 队列queue加lock来保证线程安全性。也可以考虑直接用system.threading来做(nuget上有针对3.5的这个组件,里面直接上concurrentqueue)。

线程方面直接threadpool,在threadpool对应的委托中做try catch捕获所有异常避免出现应用被终止的情况。

其他任何可以被多个线程同时访问的地方都需要做安全处理。

如:

class Foo

{

 int status=0;

 public int GetStatus()

 {

 return Thread.Volatile.Read(ref status);

//or

 var tmp=status;

 Thread.MemoryBarrier();

 return tmp;

}

}

 

如果是队列方式则如下:

ConcurrentQueue<YourJob> queue=...;

var td1=new Thread(()=>{

 YourJob job;

 while(queue.TryDequeue(out job))

 {

  try{

 //...process your job here

}

 catch(Exeception ex)

 {

 //...exception handling

}

finally

{

 Thread.Sleep(1);

}

}

});

td1.Start();

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-10-24 11:19
1

这还有直接上代码的,扯淡。具体问题具体分析,有性能问题了再分析性能出现在哪里。磁盘,CPU,内存,etc.

空明流光 | 园豆:106 (初学一级) | 2016-10-25 09:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册