是否可以在 ASP.NET WebApi 中分别处理并发用户请求?我不想通过限制来忽略用户请求,也不想添加用户会话,因为我有用户 UUID。由于多线程问题,我希望将用户请求添加到队列中,并且每当前一个请求完成时,就会发生下一个请求。
编辑:
我有一个 Android 应用程序并使用改造。客户端有可能同时发送两个请求,IIS 将在两个不同的线程中处理它。我希望具有特殊 UUID 的用户请求分别在管道中处理,而不是同时处理。
为了对来自特定客户端的请求进行排队,您可以使用命名锁:
private readonly ConcurrentDictionary<string, object> lockDict = new ConcurrentDictionary<string, object>();
然后在服务器端处理程序中获取用户 ID 并确保一次只有一个线程可以处理它:
void ProcessRequest()
{
string userId = GetUserIdFromRequest();
lock (lockDict.GetOrAdd(userId, s => new object()))
{
// do the actual processing here and return response to the client.
}
}
但请注意,此方法仅适用于单个服务器环境。如果您有服务器场,您将需要使用分布式命名锁实现。
另请注意,如果您有来自同一客户端的数百个并发请求,并且这些请求需要时间来执行,这将阻塞它们并危及服务器上的工作线程,最终影响其他请求。
我个人建议您检查当前的设计,并更多地考虑无状态架构。