在下面的代码中更改会话变量(即Session [“ Progress”])是否安全?
这段代码是ASP.Net页面背后代码的一部分。
并行运行循环时,如果两个迭代都更改了相同的会话变量,则两个迭代可能会同时运行并导致问题。
public void LongOperation()
{
Parallel.For(0, totalMembers,(i,loopState) =>
{
Thread.Sleep(2000);//wait some time to simulate processing
progress++;
Session["Progress"] = progress;//IS THIS THREAD-SAFE?
}
);
}
这不是线程安全的,但是可以跨不同打开的页面更改会话。
因此,在某些情况下,如果您致电它是安全的。
如果您仅一次从页面调用它,那么在不同页面上都是安全的。原因是会话从页面加载开始到结束完全锁定了会话。
一些类似的答案可以证明这一点。
在共享同一会话上处理另一个Web应用程序时,Web应用程序被阻止
ASP.NET Web窗体是否阻止双击提交?
尝试使Web方法异步
如果您在同一页面,不同线程中多次调用它,则需要同步。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句