2011-09-06 44 views
0

同步线程我有代码的ASP.NET应用程序是这样执行的Web请求:如何在ASP.NET

ProcessAction(actionId) 

我想确保的ProcessAction没有在同一时间对同一执行actionId,所以我需要做的服用点是这样的:

WaitIfActionWithIdIsExecuting(actionId) 
ProcessAction(actionId) 

我应该使用什么.NET同步机制?互斥量,监视器,AutoResetEvent,ManualResetEvent?

线程需要等待的情况将非常罕见。

+0

所以看起来像你有单线程处理一个一个的动作,这是正确的? – sll

+0

这会在里面1请求/响应? –

+0

可以从2个或更多ASP.NET请求中调用相同actionId的ProcessAction。 – WaldiMen

回答

1

你可以使用锁,但在Web上下文中,我宁愿通过数据库进行同步。为表示行为状态的列“状态”创建一个表(进行中,待处理,已完成等)。当然,这取决于您的特定任务。

+0

是的,它可以通过数据库(SQL Server)完成,但它需要更多的更改,我只需要一个简单的解决方案来避免生产系统中发生的竞争状况。 – WaldiMen

2

您可以创建从ID和实习生的字符串的字符串,所以,你一定总是有相同的字符串实例的ID,并使用字符串作为标识符锁定:

lock (String.Intern(actionId.ToString())) { 
    ProcessAction(actionId); 
} 
+0

实习生好主意 – sll

+0

谢谢,看起来不错,我会尝试。 – WaldiMen