C# 同时有多个请求
我的C#async有问题,当多个请求同时击中我的控制器时,我会等待。 我需要一个接一个地执行请求,而不是同时执行所有请求。C# 同时有多个请求,c#,c#-3.0,C#,C# 3.0,我的C#async有问题,当多个请求同时击中我的控制器时,我会等待。 我需要一个接一个地执行请求,而不是同时执行所有请求。 当第一个请求将数据保存在DB中,然后从队列获取下一个请求时,我认为在那里进行一些同步就足够了。让我们假设以下代码: public async Task GetData() { var result = await db.GetDataFromDatabase(); return result; } 您可以声明类型为信号量lim的私有字段,例如: priva
当第一个请求将数据保存在DB中,然后从队列获取下一个请求时,我认为在那里进行一些同步就足够了。让我们假设以下代码:
public async Task GetData()
{
var result = await db.GetDataFromDatabase();
return result;
}
您可以声明类型为信号量lim
的私有字段,例如:
private readonly SemaphoreSlim _getDataSem = new SemaphoreSlim(1, 1);
然后修改方法的主体:
public async Task GetData()
{
_getDataSem.Wait();
try
{
var result = await db.GetDataFromDatabase();
return result;
}
finally { _getDataSem.Release(); }
}
同步这些代码的方法有很多种,比如
信号灯
,锁
s等等。我认为在那里进行一些同步就足够了。让我们假设以下代码:
public async Task GetData()
{
var result = await db.GetDataFromDatabase();
return result;
}
您可以声明类型为信号量lim
的私有字段,例如:
private readonly SemaphoreSlim _getDataSem = new SemaphoreSlim(1, 1);
然后修改方法的主体:
public async Task GetData()
{
_getDataSem.Wait();
try
{
var result = await db.GetDataFromDatabase();
return result;
}
finally { _getDataSem.Release(); }
}
同步此类代码的方法有很多种,如
信号量
,锁定
s等。听起来您需要在请求和控制器之间放置队列或类似的东西。您还可以使用一个信号量(google-able-term)将代码块限制为一个线程。我会使用队列。为什么需要按顺序执行请求?大多数数据库都能很好地处理多个并发查询。您实际上想解决什么问题?将ASP.NET服务器一次限制为一个请求几乎肯定是错误的解决方案。听起来您需要在请求和控制器之间设置队列或类似的队列。您还可以使用一个信号量(google-able-term)将代码块限制为一个线程。我会使用队列。为什么需要按顺序执行请求?大多数数据库都能很好地处理多个并发查询。您实际上想解决什么问题?将ASP.NET服务器一次限制为一个请求几乎肯定是错误的解决方案。这是一个不考虑顺序的简单实现。因此,不能保证调用的执行顺序。@Stefan是正确的,但OP没有在问题中指定。同意。这是一个简单的实现,不考虑顺序。因此,不能保证调用的执行顺序。@Stefan是正确的,但OP没有在问题中指定。同意。我只是想澄清一下,我对你的帖子投了赞成票