处理并发请求以跟踪容量

时间:2020-04-06 05:37:32

标签: c# asp.net-core concurrency aws-lambda

我开发了诸如仓库管理之类的软件。

我有1个问题。

问题:

我有X条曲目。每个曲目都有不同的能力。

现在我有多个操作员,它们接受订单并填写曲目。 当操作员单击“接受”时-如果订单被接受到选定的轨道,则操作员同步必须获得响应。 假设Track A可以容纳100个订单,而currenlt内部可以容纳98个订单。

现在有3个运营商接受此曲目的订单...

我只需要2个订单,对于第3个订单显示消息,例如-抱歉,您的订单不被接受,因为这条轨道上没有空位。

方法1: 只需锁定服务器即可。

代码:

Api控制器:

[Route("api/[controller]")]
    [ApiController]
    public class TrackController : ControllerBase
    {
        public async Task<IActionResult> Test()
        {
            Console.WriteLine("Handle Request ");

            bool result = await TrackManager.ReservePlace();

            return Ok(result);
        }
    }

TrackManager:

public static class TrackManager
    {
        private static SemaphoreSlim _semaphore { get; set; }
        public static void Init()
        {
            _semaphore = new SemaphoreSlim(1);
        }

        public static async Task<bool> ReservePlace()
        {
            await _semaphore.WaitAsync();

            Console.WriteLine("Order in process...");

           await  Task.Delay(2500); <<< ==== Just simulate the biggest delay with database

            _semaphore.Release();

            return true;
        }
    }

我真的不喜欢这种方法。

第二种方法-在db中进行死锁之类的操作。

约束数据库不是一个好选择-因为跟踪容量不同。


问题:

1)处理并发请求和响应同步的最佳方法是什么?

2)我正在考虑将所有此应用程序转移到无服务器(AWS Lambda)及其云数据库。我可以采用什么解决方案...因为甚至我的锁定解决方案也可以使用Lambda来实现....

谢谢。

0 个答案:

没有答案
相关问题