/// <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); }
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; } }