Ejemplo n.º 1
0
        /// <summary>
        /// 请求入队
        /// </summary>
        /// <param name="requests">请求</param>
        /// <returns>入队个数</returns>
        public async Task <int> EnqueueAsync(IEnumerable <Request> requests)
        {
            var count = 0;

            foreach (var request in requests)
            {
                request.Hash = RequestHasher.ComputeHash(request);
                if (!await DuplicateRemover.IsDuplicateAsync(request))
                {
                    await PushWhenNoDuplicate(request);

                    count++;
                }
            }

            return(count);
        }
Ejemplo n.º 2
0
        public async Task <int> EnqueueAsync(IEnumerable <Request> requests)
        {
            MySqlTransaction transaction = null;

            try
            {
                await using var conn = new MySqlConnection(_options.ConnectionString);
                if (conn.State != ConnectionState.Open)
                {
                    await conn.OpenAsync();
                }

                transaction = await conn.BeginTransactionAsync();

                var total = 0;
                foreach (var request in requests)
                {
                    _requestHasher.ComputeHash(request);

                    var data = new { request.Hash, Request = request.Serialize() };
                    var cnt  = await conn.ExecuteAsync(_insertSetSql, data, transaction);

                    if (cnt > 0)
                    {
                        await conn.ExecuteAsync(_insertQueueSql, data, transaction);

                        total += 1;
                    }
                }

                await transaction.CommitAsync();

                return(total);
            }
            catch
            {
                if (transaction != null)
                {
                    await transaction.RollbackAsync();
                }

                throw;
            }
        }