gpt4 book ai didi

c# - 使用Lock来停止并发执行不起作用?

转载 作者:行者123 更新时间:2023-12-03 04:47:19 26 4
gpt4 key购买 nike

我有一个 API,在其中进行大量处理,例如发送服务总线队列消息并接收它、向表中添加条目,然后最终将事件发送到 socket.io 服务器。我希望所有这些都受到并发执行的保护。我正在使用Lock,但它似乎不起作用。我错过了什么吗?下面是我的代码

 public class BroadcastController : ApiController
{
private readonly Object _Lock = new Object();

[HttpPost]
[ActionName("UploadRecording")]
public async Task<HttpResponseMessage> UploadRecording()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}

string path = Path.GetTempPath();

var provider = new MultipartFormDataStreamProvider(path);

// Read the form data and return an async task.
var response = await Request.Content.ReadAsMultipartAsync(provider);

// processing the mime content

lock (_Lock)
{

// sending and receiving service bus messages
// adding records to table
// sending an event to socket.io

return Request.CreateResponse(HttpStatusCode.OK, new ResponseMessage<PersistedAudioRecord> { SuccessCode = 1, Message = "Broadcast Uploaded", Data = updatedRecord });
} } }

最佳答案

使 _Lock 对象静态。否则,您将为 Controller 的每个实例使用不同的锁。由于框架创建 Controller 的新实例来处理每个请求,因此每个请求都锁定不同的 _Lock 对象,从而不提供并发安全性。

但是,请注意,即使是静态锁定对象也仅在您拥有单个服务器时才有效。如果您有多个服务器处理请求,您将需要通过其他方式管理并发。

关于c# - 使用Lock来停止并发执行不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17472404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com