【问题标题】:How to synchronize threads in ASP.NET如何在 ASP.NET 中同步线程
【发布时间】:2011-09-06 09:59:11
【问题描述】:

我有 ASP.NET 应用程序,其中执行 Web 请求的代码如下:

ProcessAction(actionId)

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

WaitIfActionWithIdIsExecuting(actionId) 
ProcessAction(actionId)

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

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

【问题讨论】:

  • 看起来你有一个线程一个一个地处理动作,对吗?
  • 这会在 1 个请求/响应中吗?
  • 可以从 2 个或多个 ASP.NET 请求中调用相同 actionId 的 ProcessAction。

标签: c# asp.net concurrency synchronization


【解决方案1】:

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

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

【讨论】:

  • 谢谢,看起来不错,我会试试的。
【解决方案2】:

您可以使用锁,但在网络环境中,我宁愿通过数据库进行同步。为动作创建一个表,其中包含表示动作状态(进行中、待处理、已完成等)的“状态”列。当然,这取决于您的特定任务。

【讨论】:

  • 是的,它可以由数据库(SQL Server)完成,但需要更多的更改,我只需要一个简单的解决方案来避免生产系统中发生的竞争条件。
猜你喜欢
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2021-06-27
  • 2015-09-23
  • 2015-08-13
相关资源
最近更新 更多