나는이 같은 단일 요청에 서로 다른 쓰레드에 세션에서 객체를 읽기/쓰기 해요 :in-proc 세션의 읽기/쓰기 객체가 원자 연산입니까?
이제public class HomeController : Controller
{
public int Index()
{
Task.WaitAll(DoStuff(), DoMoreStuff());
var foo = Session["foo"] as Foo;
return foo.MyProperty;
}
public Task DoStuff()
{
return Task.Factory.StartNew(() =>
{
var foo = Session["foo"] as Foo;
if (foo == null || foo.MyProperty == 1)
foo = new Foo { MyProperty = 1 };
Session["foo"] = foo;
});
}
public Task DoMoreStuff()
{
return Task.Factory.StartNew(() =>
{
var foo = Session["foo"] as Foo;
if (foo == null || foo.MyProperty == 1)
foo = new Foo { MyProperty = 2 };
Session["foo"] = foo;
});
}
}
public class Foo
{
public int MyProperty { get; set; }
}
이 코드의 논리가 분명히 이해가되지 않습니다하지만 난 어떤 종류의 보여를 제공하고 있습니다 작업은 내가하고 있어요 :
- 객체 참조를 읽고,
- 쓰기 객체 참조, 새로운 객체를 생성,
- OBJ를 읽고 ect 필드.
저는 기존 개체를 수정하고 있지 않습니다. 이 코드가 일반적으로 세션 상태 또는 메모리를 손상시킬 수 있습니까?
기본 in-proc 세션 구현이있는 ASP.NET MVC 응용 프로그램입니다.
이 코드가 세션에 액세스 할 때마다 Session.SyncRoot
에 잠겨 있으면이 코드가 세션 상태를 손상시킬 수 있습니까?