Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同时有多个请求_C#_C# 3.0 - Fatal编程技术网

C# 同时有多个请求

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

我的C#async有问题,当多个请求同时击中我的控制器时,我会等待。 我需要一个接一个地执行请求,而不是同时执行所有请求。
当第一个请求将数据保存在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没有在问题中指定。同意。我只是想澄清一下,我对你的帖子投了赞成票