public async Task Run() { int runCount = 0; while (!OperateLogQueue.Queue.IsEmpty && runCount++ < BatchLimitCount) { OperateLogQueue.Queue.TryDequeue(out OperateLogMessage message); // 有消息将数据写入数据库 if (message != null) { var settings = _logSettingCaching.GetCacheData(60 * 60 * 24); var setting = (from s in settings where s.Action == message.Action && s.Controller == message.Controller select s).FirstOrDefault(); if (setting != null && setting.IsRecord) { var detail = new OperateLogDetail { OperateAt = DateTime.Now, SettingId = setting.Id, OperatorAccount = message.Account, OperatorName = message.Name, Content = message.RequestContent, ResultCode = message.HttpResultCode, Uri = message.Uri }; await _logDetaiRrepository.AddAsync(detail); } } } await _systemIdentityDbUnitOfWork.SaveAsync(); }
public async Task DoWork() { // GetConsumingEnumerable在程序启动时会阻塞主线程,加上了这个delay就可以了 await Task.Delay(1); foreach (var message in OperateLogQueue.blockingCollection.GetConsumingEnumerable()) { // 有消息将数据写入数据库 if (message != null) { var settings = _logSettingCaching.GetCacheData(60 * 60 * 24); var setting = (from s in settings where s.Action == message.Action && s.Controller == message.Controller select s).FirstOrDefault(); if (setting != null && setting.IsRecord) { var detail = new OperateLogDetail { OperateAt = DateTime.Now, SettingId = setting.Id, OperatorAccount = message.Account, OperatorName = message.Name, Content = message.RequestContent, ResultCode = message.HttpResultCode, Uri = message.Uri }; await _logDetaiRrepository.AddAsync(detail); await _systemIdentityDbUnitOfWork.SaveAsync(); } } } }