コード例 #1
0
        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();
        }
コード例 #2
0
        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();
                    }
                }
            }
        }