我现在正在编写一个小系统的后台,是用WebService写的接口,我想请教大神们,如果让多个用户同时处理是不会出现异常,如何列队、并发处理事务,请相信介绍下, 感激不尽。
用lock锁
@久久小垠: 不是啊,就是把你的代码锁起来,具体的你百度一下,用法很简单,看看能否达到你要的效果、、、
可以使用消息队列的,并发请求无非是容易导致阻塞问题,如果将请求塞到队列中,按顺序先到先得资源的原理,就可以避免多用户引起的并发问题。
或者用线程处理http://www.cnblogs.com/durow/p/4837746.html
你好,有简单的是实例代码吗?谢谢
你framework版本多少?
3.5
@久久小垠: 队列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();
这还有直接上代码的,扯淡。具体问题具体分析,有性能问题了再分析性能出现在哪里。磁盘,CPU,内存,etc.