所以假设我有ria服务DomainDataService类:
public partial class SomeService : LinqToEntitiesDomainService<SomeEntities>
{
List<string> list = new List<string>();
public IQueryable<SomeEntity> GetSomeEntity()
{
list.Add("test");
...
}
}
存在全局变量list
。CCD_ 2方法显然可以同时调用。问题是:并行GetSomeEntity
调用之间是否共享list
,即我是否必须用锁来保护它?我想这同样适用于所有的asp.net服务器端风格,例如web服务(或者不?)。
它应该取决于服务的上下文模式。你可以通过一个属性来控制它:
[EnableClientAccess()]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public partial class SomeService : LinqToEntitiesDomainService<SomeEntities>
{
我认为默认选项是ConcurrencyMode.Single
。
来自MSDN:"将ConcurrencyMode设置为Single指示系统将服务实例限制为一次执行一个线程,这将使您免于处理线程问题"
因此,为了回答您的问题,全局list
不会在对服务的调用之间共享(除非您的调用是静态的)。