【发布时间】:2013-09-11 09:48:39
【问题描述】:
我想避免并发访问服务器端业务逻辑中的一段代码。 我的商务舱不是静态课程。服务层在 wcf 中实现。有什么建议吗?
【问题讨论】:
-
你没有提供足够的信息让我们给出模糊的建议。
标签: c# multithreading wcf parallel-processing
我想避免并发访问服务器端业务逻辑中的一段代码。 我的商务舱不是静态课程。服务层在 wcf 中实现。有什么建议吗?
【问题讨论】:
标签: c# multithreading wcf parallel-processing
您需要使用某种同步机制。最简单的是lock 语句:
class BusinessLogic
{
// To avoid the possibility of a deadlock, prevent external code from
// ever acquiring this lock by making the lock target private.
private readonly object lockTarget = new object();
void Foo()
{
lock(lockTarget)
{
// your code here
}
}
}
当然,线程同步一般来说是一个复杂的话题,只有在考虑特定的上下文之后才能达到正确或最佳的解决方案。 System.Threading 命名空间中还有其他同步原语,您也应该注意。
【讨论】:
问题需要进行一些编辑以清楚地提及您要限制并发访问的业务逻辑在哪里,它是 wcf 方面的一部分吗?
还有你目前为 wcf 配置了哪种 wcf 并发模式?
我假设您想要控制访问的代码是 wcf 方面的一部分,假设您的类不是静态的,那么限制并发访问的唯一方法是通过 .net 中提供的各种锁定机制。
检查 C# 中的锁定,看看哪一个最适合您的锁定需求(您需要多少线程安全性)。
也可以查看这个讨论,它会给你一些关于你需要什么的指导: http://social.msdn.microsoft.com/Forums/vstudio/en-US/f82f9cd8-87d6-4a4e-9e03-5dd2d143c680/wcf-service-concurrency-lock-right-way-to-do
【讨论】: