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 } }