如何在ASP.NET中同步线程

时间:2011-09-06 09:59:11

标签: c# asp.net concurrency synchronization

我有一个ASP.NET应用程序,其代码类似于执行Web请求:

ProcessAction(actionId)

我想确保同一actionId不会同时执行ProcessAction,所以我需要做这样的事情:

WaitIfActionWithIdIsExecuting(actionId) 
ProcessAction(actionId)

我应该使用什么.NET同步机制? Mutex,Monitor,AutoResetEvent,ManualResetEvent?

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

2 个答案:

答案 0 :(得分:2)

您可以从id和intern字符串创建一个字符串,这样您就可以确保始终为id提供相同的字符串实例,并使用该字符串作为标识符进行锁定:

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

答案 1 :(得分:1)

您可以使用锁,但在Web上下文中,我宁愿通过数据库进行同步。为具有“status”列的操作创建一个表,该列表示操作的状态(InProgress,Pending,Completed等)当然这取决于您的特定任务。