您现在的位置是:首页 > Javascript
当前栏目
abp工作单元uow死锁
2023-02-25 18:21:31 时间
ASP.NET Core Controller Actions(一个http请求)会被默认构建为一个工作单元。若在此工作单元内,再次发起一个http请求,并且更新同一条数据,则会造成死锁。
[HttpGet(Name = "UpdateUserInformation")]
public async Task<ActionResult> UpdateUserInformation()
{
XM.XFQ.SmallSeparation.Domain.User.User newUser = null;
XM.XFQ.SmallSeparation.Domain.User.User user = new XM.XFQ.SmallSeparation.Domain.User.User
{
Username = "Admin",
Password = "123456"
};
//更新操作
newUser = await _userService.UpdateUser(user);
//发起新的http请求
Test();
return Json(newUser);
}
[HttpGet(Name = "Test")]
public async void Test()
{
string serviceAddress = "https://localhost:xxxx/api/User/UpdateUserInformation2";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceAddress);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var stream = response.GetResponseStream();
string result = new StreamReader(stream, System.Text.Encoding.UTF8).ReadToEnd();
}
[HttpGet(Name = "UpdateUserInformation2")]
public async Task<ActionResult> UpdateUserInformation2()
{
XM.XFQ.SmallSeparation.Domain.User.User newUser = null;
XM.XFQ.SmallSeparation.Domain.User.User user = new XM.XFQ.SmallSeparation.Domain.User.User
{
Username = "Admin",
Password = "123456"
};
//更新同一条数据
newUser = await _userService.UpdateUser(user);
return Json(newUser);
}
尽量避免该类型的业务逻辑出现。若无法避免,则可以通过缩小事务粒度来解决。
[HttpGet(Name = "UpdateUserInformation")]
public async Task<ActionResult> UpdateUserInformation()
{
XM.XFQ.SmallSeparation.Domain.User.User newUser = null;
XM.XFQ.SmallSeparation.Domain.User.User user = new XM.XFQ.SmallSeparation.Domain.User.User
{
Username = "Admin",
Password = "123456"
};
//更新完成后,提交事务
using (var uow = _unitOfWorkManager.Begin(requiresNew: true))
{
newUser = await _userService.UpdateUser(user);
await uow.CompleteAsync();
}
//发起新的http请求
Test();
return Json(newUser);
}
相关文章
- JDK中内嵌JS引擎介绍及使用
- 49195,npm最后的疯狂?盘点10款最有前途JavaScript构建工具
- 译文:5个增强Node.js应用程序增强功能
- 4个例子,吃透 JavaScript 实现的二叉搜索树 BST
- Vue中使用XML和JSON格式互转插件
- JDK中Jshell简单使用(JDK9版本以上或者JDK9版本)
- shiro中的JSP标签支持
- Java技术点-json转对象,对象转json
- SpringBoot+SpringDataJpa @Query之 JPQL使用书写模板(模糊查询and条件查询)
- Spring Boot中的Freemarker模版引擎引用css和js的正确姿势
- Node.js解压版的环境配置及相关常用命令
- JSP学习笔记(6)—— 自定义MVC框架
- JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍
- Jsp学习笔记(4)——分页查询
- APIJSON简单使用
- JSP学习笔记(3)——JSTL 标签库
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
- JavaScript ES6 Promise对象
- Web前端——JavaScript扩展补充
- Web前端——表单提交和Js添加选项