public async Task Tests(int iteration)
        {
            var data = Enumerable.Range(0, 10000)
                       .Select(i => new Products()
            {
                CategoryId   = null,
                Discontinued = false,
                ProductName  = $"lol_{i}",
            }).ToList();

            var bulk = new SimpleBulkCopy <Products>(NorthwindContext.ConnectionString, new ProductDefinition(), 2);

            using (var blockingContext = new NorthwindContext())
            {
                using (var blockingTran = blockingContext.Database.BeginTransaction())
                {
                    blockingContext.Products.FromSqlRaw("SELECT TOP 1 * FROM  Products (TABLOCKX)").ToList();

                    var releaseTask = Task.Delay(4000).ContinueWith(e =>
                    {
                        blockingTran.Commit();
                    });

                    await Task.WhenAll(releaseTask, DoSave(data, bulk));
                }
            }
        }
        private static async Task DoSave(List <Products> data, SimpleBulkCopy <Products> bulk)
        {
            try
            {
                await bulk.BegginSave();

                await bulk.Save(data);

                await bulk.FinalizeSaving(false);
            }
            catch (System.Threading.Tasks.TaskCanceledException exc)
            {
                // It's expected result
            }
        }