我有一个ASP.NET应用程序,其代码类似于执行Web请求:
ProcessAction(actionId)
我想确保同一actionId不会同时执行ProcessAction,所以我需要做这样的事情:
WaitIfActionWithIdIsExecuting(actionId)
ProcessAction(actionId)
我应该使用什么.NET同步机制? Mutex,Monitor,AutoResetEvent,ManualResetEvent?
线程需要等待的情况非常罕见。
答案 0 :(得分:2)
您可以从id和intern字符串创建一个字符串,这样您就可以确保始终为id提供相同的字符串实例,并使用该字符串作为标识符进行锁定:
lock (String.Intern(actionId.ToString())) {
ProcessAction(actionId);
}
答案 1 :(得分:1)
您可以使用锁,但在Web上下文中,我宁愿通过数据库进行同步。为具有“status”列的操作创建一个表,该列表示操作的状态(InProgress,Pending,Completed等)当然这取决于您的特定任务。