3

所以假设我有 ria 服务 DomainDataService 类:

public partial class SomeService : LinqToEntitiesDomainService<SomeEntities>
{
    List<string> list = new List<string>();
    public IQueryable<SomeEntity> GetSomeEntity()
    {
       list.Add("test");
       ...
    }
}

有一个全局变量listGetSomeEntity方法显然可以同时调用。问题:list在并行GetSomeEntity调用之间共享,即我必须用锁保护它吗?我想这同样适用于所有 asp.net 服务器端风格,例如 Web 服务(或不是?)。

4

1 回答 1

2

它应该取决于服务的上下文模式。你可以通过一个属性来控制它:

[EnableClientAccess()]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public partial class SomeService : LinqToEntitiesDomainService<SomeEntities>
{

我相信默认选项是ConcurrencyMode.Single.

来自MSDN:“将 ConcurrencyMode 设置为 Single 指示系统将服务实例一次限制为一个执行线程,从而使您免于处理线程问题”

因此,要回答您的问题,全局list不会在对您的服务的调用之间共享(除非您是静态的)。

于 2013-08-19T19:31:02.767 回答