ASP.NET Core在开始事务之前等待所有其他线程

时间:2019-03-27 08:17:58

标签: multithreading asp.net-core

我需要使用EF Core在一张桌子上执行几项任务(重新计算)。开始计算时,其他任何事务都不应开始。
使用Database.BeginTransactionAsync / TransactionScope可以做到吗?

类似这样的东西:

  • 线程1启动。
  • 线程1输入事务
  • 线程1执行select语句
  • 线程2启动。
  • 线程2输入事务(并等待!!)
  • 线程1做一些工作(线程2正在等待)
  • 线程1进行一些查询(线程2正在等待)
  • 线程1将更改保存到一个表(线程2正在等待)
  • 线程1结束事务(它将继续在线程2上执行代码)
  • 线程2代码运行

我看到了四种可能的方法,但是选项1、2和4不起作用:

  1. DbContext.Database.BeginTransaction(如果有2个方法(对API进行了2次调用)对此进行了调用,则第二个应等待)
  2. new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)(如果有2个方法(对API进行了2次调用)对此进行了调用,则第二个应等待)
  3. 创建一些静态变量并使用lock(static_variable)
  4. 锁定表,但不起作用

对数据库/表进行任何锁定都会更好,因为这可以确保例如在Management Studio中完成工作。我也尝试过:

BEGIN TRANSACTION;
SELECT top 1 1 FROM [Transactions] WITH (TABLOCKX, HOLDLOCK)

但是我可以在其他Management Studio中呼叫select,因此表未锁定。

0 个答案:

没有答案