首页 新闻 会员 周边 捐助

.NET Core WebAPI 会不会发生并发访问上的事务冲突?

0
悬赏园豆:15 [待解决问题]

大体是这样的,我定义了一个同步方法,客户端把数据上传到该方法进行数据保存。方法体里启用了一个事务进行写入:

[HttpPost("PushFileData")]
public ActionResult PushFileData([FromBody] Web_PushFileData file)
{
if (file == null) return BadRequest();
else if (file.Path.Equals("NULL")) return Accepted(); //不同步根目录,因为根目录无法比较谁最新

      【  bool b = this.dbService.PushFileData(this.testUserID, file); 】//里面开启了事务
        if (b == true)
        {
            return Ok();  //(成功)服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
        }
        else
        {
            return Accepted(); //(已接受)服务器已接受请求,但尚未处理。
        }
    }

之前该方法若改为异步,会有类似”已经有另一个开启的事务“的异常警告,毕竟分配了两个线程同时执行方法,就变成多事务冲突。把方法改为同步之后,若是多个用户同时调用该方法,会不会也将产生多事务冲突?

PER10的主页 PER10 | 初学一级 | 园豆:8
提问于:2021-01-12 19:08
< >
分享
所有回答(2)
0

接口访问并发真的会产生。如果要避免的话,可以使用排队机制。
类似于生产者和消费者的模式。

楠木大叔 | 园豆:2083 (老鸟四级) | 2021-01-12 22:17

题中是一个Web请求方法,如何做排队?

支持(0) 反对(0) PER10 | 园豆:8 (初学一级) | 2021-01-15 00:04
0

同步跟异步跟事务冲突貌似没关系
不管是同步还是异步,都是请求资源
并发请求资源都会产生冲突
至于你说的多事务冲突,那是数据库层面的冲突,看看数据库的事务级别而定

不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2021-01-13 11:17

请教下Web项目遇到这种并发情况通常如何做数据库事务?

支持(0) 反对(0) PER10 | 园豆:8 (初学一级) | 2021-01-15 00:05

@PER10:

你是说在这个方法使用异步方法报错吗?
原因是默认情况下TransactionScope不会从一个线程切换到另一个线程。用 TransactionScopeAsyncFlowOption.Enabled:

using(var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
var groups = await Context.ProductGroups.ToListAsync()。ConfigureAwait(false);
}

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2021-01-15 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册