public async Task <QueueItem> EnqueueAsync(QueueDbContext context, string value)
        {
            var item = new QueueItem()
            {
                Id = Guid.NewGuid().ToString(), Value = value, State = 0, LastModifyDateTime = DateTime.UtcNow
            };
            var res = await context.Queue.AddAsync(item);

            return(res.Entity);
        }
        public async Task <QueueItem> DequeueAsync(QueueDbContext context)
        {
            var now       = DateTime.UtcNow;
            var limitTime = now - TimeSpan.FromSeconds(5);
            var res       = await context.Queue
                            .FromSql("UPDATE \"Queue\" SET \"State\" = 1, \"LastModifyDateTime\" = {0} WHERE \"Id\" = (SELECT \"Id\" FROM \"Queue\" WHERE \"State\" = 0 OR (\"State\" = 1 AND \"LastModifyDateTime\" < {1} ) ORDER BY \"LastModifyDateTime\" FOR UPDATE SKIP LOCKED LIMIT 1) RETURNING *", now, limitTime)
                            .ToListAsync();

            var item = res.FirstOrDefault();

            if (item != null)
            {
                context.Queue.Remove(item);
            }
            return(item);
        }