public async Task DoWork() { // GetConsumingEnumerable在程序启动时会阻塞主线程,加上了这个delay就可以了 await Task.Delay(1); foreach (var message in LoginLogQueue.blockingCollection.GetConsumingEnumerable()) { // 有消息将数据写入数据库 if (message != null) { var detail = new LoginLogDetail { OperateAt = message.OperateAt, OperatorAccount = message.OperatorAccount, IpAddress = message.IpAddress, IsSuccess = message.IsSuccess, }; await _loginLogDetail.AddAsync(detail); await _systemIdentityDbUnitOfWork.SaveAsync(); } } }
public async Task Run() { int runCount = 0; while (!LoginLogQueue.Queue.IsEmpty && runCount++ < BatchLimitCount) { LoginLogQueue.Queue.TryDequeue(out LoginLogMessage message); // 有消息将数据写入数据库 if (message != null) { var detail = new LoginLogDetail { OperateAt = message.OperateAt, OperatorAccount = message.OperatorAccount, IpAddress = message.IpAddress, IsSuccess = message.IsSuccess, }; await _loginLogDetail.AddAsync(detail); } } await _systemIdentityDbUnitOfWork.SaveAsync(); }