示例#1
0
        /// <inheritdoc />
        public async Task <SampleTask> CreateAsync(SampleTask task, CancellationToken token)
        {
            _dbContext.Set <SampleTask>().Add(task);
            await _dbContext.SaveChangesAsync(token);

            return(task);
        }
        public static void Main()
        {
            var s = new SampleTask();

            s.RaceConditions();
            Console.ReadLine();
        }
        private async Task ReceiveTasks(CancellationToken token)
        {
            using var dbContext = CreateDbContext();
            var taskRepo = new TaskRepository(dbContext);

            try
            {
                var receivedTasks = new List <SampleTask>(100);
                dbContext.Database.BeginTransaction();
                await _consumer.Consume <CreateSampleTaskDto>(async (taskDto) =>
                {
                    var task = new SampleTask
                    {
                        Description = taskDto.Description
                    };
                    var savedTask = await taskRepo.CreateAsync(task, token);
                    receivedTasks.Add(savedTask);
                });

                dbContext.Database.CommitTransaction();
                if (receivedTasks.Count > 0)
                {
                    Console.WriteLine("----------------");
                    Console.WriteLine("Из очереди прочитаны и сохранены задачи:");
                    receivedTasks.ForEach(t =>
                    {
                        Console.WriteLine($"TaskID: {t.TaskId}, " +
                                          $"Description: {t.Description}, " +
                                          $"CreateDate: {t.CreateTime.ToLocalTime()}");
                    });
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                dbContext.Database.RollbackTransaction();
            }
        }