abp工作单元uow死锁

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);
}
本文转载于网络 如有侵权请联系删除

相关文章

  • 值传递与引用传递

    “哥,说说Java到底是值传递还是引用传递吧?”三妹一脸的困惑,看得出来她被这个问题折磨得不轻。“说实在的,我在一开始学Java的时候也被这个问题折磨得够呛,总以为基本数据类型在传参的时候是值传递,而引用类型是引用传递。”我对三妹袒露了心声,为的就是让她不再那么焦虑,她哥当年也是这么过来的。C语言是很多编程语言的母胎,包括Java,那么对于C语言来说,所有的方法参数都是“通过值”传递的,也就是说,传递给被调用方法的参数值存放在临时变量中,而不是存放在原来的变量中。这就意味着,被调用的方法不能修改调用方法中变量的值,而只能修改其私有变量的临时副本的值。Java继承了C语言这一特性,因此Java是按照值来传递的。接下来,我们必须得搞清楚,到底什么是值传递(passbyvalue),什么是引用传递(passbyreference),否则,讨论Java到底是值传递还是引用传递就显得毫无意义。当一个参数按照值的方式在两个方法之间传递时,调用者和被调用者其实是用的两个不同的变量——被调用者中的变量(原始值)是调用者中变量的一份拷贝,对它们当中的任何一个变量修改都不会影响到另外一个变量,据说Fort

  • 解决matplotlib.pyplot在Jupyter notebook中不显示图像问题

    在代码首行添加:%matplotlibinline 即可。补充知识:jupyter不能显示Matplotlib动画看莫烦老师的matplotlib教程中,有一段sinx函数动画,用Jupyter跑却不能显示动画效果。解决方案:在前面加一句%matplotlibnotebook动画代码如下:%matplotlibnotebook importtensorflowastf importnumpyasnp importmatplotlib.pyplotasplt frommatplotlibimportanimation fig,ax=plt.subplots() x=np.arange(0,2*np.pi,0.01) #返回的是个列表 line,=ax.plot(x,np.sin(x)) defanimate(i): #xdata保持不变,ydata更新成另外一批数据 #将0-100都传进去更新一下,i变化时,y也会变化,更新图像 line.set_ydata(np.sin(x+i/10)) returnline, definit(): line.set_ydata(np.sin(x))

  • 老K白话| 密集存储系统演化史(文尾投票)

    导语大家好,我是智能仓储物流技术研习社的社长,老K。受近年来我国土地成本和人工成本上涨、电子商务高速发展、制造业转型升级等多重外部因素带动,仓储自动化技术装备市场需求旺盛。其中在智能仓储物流设备,“密集存储”是其中一个亮点。目前有很多厂家都参与其中,从密集设备到密集系统集成再到密集存储管理软件等等。今天老K也带着大家一起梳理一下自动化密集存储系统的来龙去脉。“密”是啥密集存储系统的核心在于一个字:密。谈到“密”,我们可能想到的是这样,甚至有个专门的病叫“密集恐惧症”。那究竟什么是“密”呢?汉语词典中对“密”做出了解释。“密”用作形容词,指事物之间的距离很近,事物的部分之间空隙小。如紧密、严密、稠密、茂密、密集、密封、紧锣密鼓、乌云密布等。那对应到仓储系统中的“密”,也是类似。密集存储系统,应该主要指的是:仓库中的物料与物料之间的距离很小。目的是在有限的空间内,存放尽可能多的物料。因此,某种程度上,很多自动化存储系统不应该叫做密集存储,比如传统自动化立体仓库。试想一下,我们到了北京,上海这样的内陆大城市,看到下图所示的高楼大厦时往往会说:哇,好高的大楼!而我们到了香港,看到下图所示的高楼

  • 爱了!爱了!一款用 pandas 玩转 SQL 的神器

    作者:黄同学本文的所有演示数据,均是基于下方的四张表。下面这四张表大家应该不陌生,这就是网传50道经典MySQL面试题中使用到的几张原表。关于下方各表之间的关联关系,我就不给大家说明了,仔细观察字段名,应该就可以发现。简介pandas中的DataFrame是一个二维表格,数据库中的表也是一个二维表格,因此在pandas中使用sql语句就显得水到渠成,pandasql使用SQLite作为其操作数据库,同时Python自带SQLite模块,不需要安装,便可直接使用。这里有一点需要注意的是:使用pandasql读取DataFrame中日期格式的列,默认会读取年月日、时分秒,因此我们要学会使用sqlite中的日期处理函数,方便我们转换日期格式,下方提供sqlite中常用函数大全,希望对你有帮助。sqlite函数大全:http://suo.im/5DWraE导入相关库:importpandasaspd frompandasqlimportsqldf 复制声明全局变量的2种方式①在使用之前,声明该全局变量;②一次性声明好全局变量;①在使用之前,声明该全局变量df1=pd.read_excel(&q

  • Salesforce 并购整合路径分析

    一、重要结论在梳理Salesforce并购整合路径的整个过程中,我们总结出Salesforce外延拓展的两条核心主线:技术逻辑与产品逻辑。技术并购帮助Salesforce从PC时代跨越到互联网,再次从移动互联网到云计算大数据,使Salesforce能够利用高新科技去完善自己的底层架构与技术储备。从产品逻辑上看,Salesforce起步于中小企业的CRM管理(NASDAQ代码即为CRM),早期并未从大型客户切入,同时产品线也较为单一。通过资本市场上的外延并购,逐步补充和完善自己的产品线,其中收购标的不乏财务、HR、ERP、大客户流程管理软件等。伴随着客户数的增多与产品线的丰富,客户结构也逐步由中小型向大型客户过渡,LTV/CAC也逐步攀升。1999年成立的Salesforce,通过技术并购成功实现了底层框架基础技术的变革;通过产品创新与整合将自身从销售驱动型的公司打造成为产品驱动型公司;最终在技术与产品的双轮驱动下,过渡成为科技驱动型的营销巨头。对于国内耕耘于企业级营销管理服务的独角兽以及未来的巨头们,Salesforce的内生与外延成长路径给大家已经做出了示例,即CRM是主业,数据是核

  • 容器,Docker, Kubernetes和Kyma,以及Kyma对SAP的意义

    大家好,今天非常高兴能给大家做一个关于Kyma的技术分享。这个session的audience主要是针对使用咱们成都研究院使用Java和nodejs等技术栈做微服务开发的同事们。对于在ABAPnetweaver上做SAP传统开发的同事们来说,这个session可以让大家开阔一下眼界。这是今天session的agenda:•WhyContainers?•RelationshipbetweenContainersandDockers?•WhyKubernetes?•RelationshipbetweenKymaandKubernetes•Arealexample:CommercecloudextensionviaKyma之所以要在Kyma真正开始前做容器,Docker,Kubernetes的铺垫,是因为Kyma基于Kubernetes,而Kubernetes又是容器编排框架,Docker又是一种流行的容器运行时实现技术,如果不提Kubernetes,Docker和容器,没有接触过这些概念的同事一定会觉得一头雾水。我们先来看容器。我们说任何技术都有其使用场景和解决的痛点。那么为什么这些年来容

  • VR领域迎来大量融资,但智能硬件企业依然生存存疑

    如今,越来越多的明星喜欢上了跨界做电子产品,比如很久之前周杰伦的uGate定制手机,随后崔健的蓝色骨头,还有韩庚和他的庚phone,现在又有小骨手机,乐视也说要出太子妃定制机等等,冲着名人效应、粉丝经济,越来越多的明星都想进入手机等智能硬件市场。2015年10月,汪峰正式发布了由他自己亲自参与设计的Fiil耳机,并称该款耳机的投入与十九年前创作的第一张专辑相当。Fiil耳机官网上放出了在资本寒冬下Fiil耳机获得了2000万美元的融资,不过,现实是融资额与估值均不及预期。2015年8月,Fiil耳机就曾表示A轮融资预计在一亿美元,但是实际融资额却仅有预期的五分之一,最主要的原因就是耳机的销量没有达到投资人的预期。尽管Fiil耳机官方表示,推出的3款耳机创下了预约量过100万的行业记录,但是有接近Fiil耳机供应链的人士表示,现在Fiil耳机的实际出库量仅为几万条。Fiil耳机共有三款产品,两款大耳机分别是售价1099元的FIIL和售价1599元的FIILWireless,由深圳富士高代工,另一款小耳机为售价599元的FIILBestie,是由江西南昌的联创公司代工。小耳机由于价格上的优

  • 0.1+0.2!=0.3的分析

    现象我们在js中进行如下运算时console.log(0.1+0.2)//结果0.30000000000000004而不是0.3 1复制可以看到0.1+0.2!=0.3原因数字的存储方式原理在计算机中数字无论是定点数还是浮点数都是以多位二进制的方式进行存储的。 在JS中数字采用的IEEE754的双精度标准进行存储(存储一个数值所使用的二进制位数比较多,精度更准确)示例在定点数中,如果我们以8位二进制来存储数字。 对于整数来说,十进制的35会被存储为:00100011其代表2^5+2^1+2^0。 对于纯小数来说,十进制的0.375会被存储为:0.011其代表1/2^2+1/2^3=1/4+1/8=0.375对于像0.1这样的数值用二进制表示你就会发现无法整除,最后算下来会是0.000110011…由于存储空间有限,最后计算机会舍弃后面的数值,所以我们最后就只能得到一个近似值。 JS中采用的IEEE754的双精度标准也是一样的道理在存储空间有限的情况下,当出现这种无法整除的小数的时候就会取一个近似值,在js中如果这个近似值足够近似,那么js就会认为他就是那个值。console.log

  • SpringMVC

    SpringMVC 第一章SpringMVC概述 1.1SpringMVC基本说明 SpringMVC是基于Spring的,是Spring中的一个模块,做web开发使用的。 SpringMVC叫做Springwebmvc,说明他是Spring的核心技术,做web开发的,SpringMVC内部是使用mvc架构模式。 SpringMVC是一个容器,管理对象的,使用IoC核心技术。 SpringMVC是管理界面层中的控制器对象。 SpringMVC底层也是Servlet。以Servlet为核心,接收请求、处理请求、显示处理结果给用户。   处理用户的请求: 用户发起请求---SpringMVC---Spring---MyBatis---Mysql数据库 1.2SpringMVC中的核心Servlet--DispatcherServlet DispatcherServlet是框架中的一个Servlet对象。负责接收请求,响应处理结果 DispatcherServlet的父类是HttpServlet DispatcherServlet

  • 苹果AirPods的尴尬:山寨出货6亿副,正品不足9000万...网友:怪不得满大街都是

    Hi,大家好,我是niceyoo 今天聊点别的,不知道大家有没有发现,我们平时在地铁、公交以及各种商场中都能看到很多人带着苹果AirPods耳机,就好像售价1000多元钱的AirPods非常廉价,谁都可以轻松购买一样,这就离谱!难道现在有钱人这么多了? 咳咳,显然不是,如果你真的这么想的话,其实你看到的只是表面,或许这里面大部分人带的AirPods耳机都是山寨的。 苹果不送耳机,火了山寨 2016年9月苹果发布会上,苹果iPhone7系列宣布取消3.5mm耳机孔,为此苹果推出了全新产品线TWS真无线蓝牙耳机AirPods系列,但AirPods一经推出,外界却反响平平,更有甚者认为苹果这么一款耳机卖1279元简直就是在将用户的智商按在地上摩擦,因为这款耳机毫无音质可言,对于用户来说简直就是“抢钱”。 然而过去了半年,所有人都开始真香了。 通常,大多数电子产品都是在发布时人气达到最高,之后持续走低,而AirPods的人气却在发布后的两年半里不降反升,持续走高,搜索率比发布时涨了十倍... 华强北AirPods的商机,来了。 如果说爆发点的话,去年新发布的iPhone12系列,打着环保的口

  • 【转】iOS 10 UserNotifications 使用说明

    注意:XCode8的需要手动开启主targetCapabilities中的PushNotification。 关于创建多个target后真机测试的证书问题,除了主target手动创建开发和发布证书,并设置了APNS证书外,其它均使用Automaticallymanagesigning。   首先介绍一下本文涉及到UserNotifications的几个主要类。 其中 [1]UNNotification主要是作为通知delegate方法的参数使用。包含UNNotificationRequest信息。 [2]UNNotificationAction是通知中添加的action,展示在通知栏的下方。默认以的button样式展示。有一个文本输入的子类UNTextInputNotificationAction。可以在点击button之后弹出一个键盘,输入信息。用户点击信息和输入的信息可以在UNNotificationResponse中获取。 [3]UNNotificationAttachment是新增的通知内容格式,可以设置图像和视频。Demo中使用说明。 [4]UNNotificat

  • Apollo 分布式配置中心

    目录Apollo分布式配置中心什么是ApolloApollo的优势部署Apollodocker-compose快速构建.NET6项目接入Apollo引入依赖在Program.css类中添加修改appsettings.jsonApollo实现热更新 Apollo分布式配置中心 什么是Apollo 相当于微服务中的配置中心,如nacos等,可以将.NET项目中配置文件统一管理起来,且大部分配置修改后可以直接生效(热更新)。(IOptionMonitor,IOptionsSnashot)相比于nacos,Apollo更加的重量级,功能也更加强大(相对的也更加复杂)。Apollo提供了丰富的权限设定,环境配置。在选择时,如果您只需要简单的管理配置,并不需要多环境,没有多部门多用户协作,也不需要用户权限,只是小厂,请无脑选择nacos,否则请选择Apollo。 Apollo的优势 统一管理不同环境、不同集群的配置:Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。 权限管理、发布审核、操作审计

  • 软件测试中测试环境独立性的原因

    从事软件测试行业的都知道,测试环境必须和开发环境分离,测试环境的独立性原因如下: 1、有利于重现开发环境无法重新的bug。 2、有利于保障测试结果的真实性与正确性。 3、便于开发人员可以并行修复bug,加快整体进度。 4、可以验证软件的安装部署过程,提前发现安装部署及其文档是否有问题,有利于后续运维工作的顺利开展。 5、可以避免因缺失环境、共用环境甚至环境被破坏,而导致测试延迟、测试被干扰甚至无法进行的风险。 BestRegards, --------------------------------------------------------------- 作者:whylaughing 博客地址:http://www.cnblogs.com/whylaughing/ 注意事项:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • Word Cloud (词云) - Matlab

    今天要总结的是WordCloud最后一个部分了,用Matlab来创建wordcloud。MatlabR2018b已经提供[wordcloud](https://www.mathworks.com/help/matlab/ref/wordcloud.html)函数可以直接生成词云了。 #####>>CreateWordCloudviaMatlab 准备文本。 不多说了,懒人继续用上次那个WordCloudHistory.txt的文本吧。 读取并清洗数据文本。 %readtxtasastring text=string(fileread('C:\Users\yuki\Desktop\WordCloudHistory.txt')); %deletepuchuation punctuationCharacters=[".""?""!"","";"":"]; text=replace(text,punctuationCharacters,""); %convertastringtoarray words=split(join(text)); %deletetheword

  • 揭开人月神话的面纱

    ​如果不是老师推荐,我绝不会将《人月神话》这本书和软件工程联系起来,单从表面看,我原来还天真的认为这一定是和希腊神话有关的一本书。 ​今天我只是读了《人月神话》的第一章——焦油坑。焦油坑,一个能够紧紧束缚任何猛兽的绝境;作者将编程项目开发一事比喻成了焦油坑,意思是说许许多多的编程项目一个个都湮没在历史的长河中。既然,编程这件事这么容易将程序员的梦想打破,那么又怎么会有这么多的人纷纷投身于软件开发的事业中来呢?作者给了五个答案: ​1.编程给人一种创建事物的纯粹的快乐。 ​2.能开发对他人有用的东西。 ​3.整个过程体现着一种魅力——将零部件组装起来,组成的系统精妙地运行着。 ​4.持续学习的快乐。 ​5.在易于驾驭的介质上工作。 ​回想起当时自己因为初次接触编程时,被它的精妙所触动,空白的电脑屏幕上竟然能自动的显现出“Helloworld!”的字样,我的内心是那样的欣喜......一想到“既然能让电脑说话,哪还有什么是我们通过编程不能让电脑做到的呢?”。 ​今天就这样吧,明天一早我还要继续欣赏布鲁克斯的著作呢!

  • GoldNumber游戏比赛成绩公布

    比赛介绍:http://www.cnblogs.com/xinz/p/3347418.html 黄金点游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分 同学们还是两人结对(这次可以自由组合),设计一个基于网络的黄金点游戏。 然后我们通过对大家服务器、客户端程序的演示与评比(视频地址:http://i.youku.com/u/id_UNzg5NzIxMTY=)选出194和215同学的服务器作为比赛服务器。 下面就要进行真刀真枪的客户端比赛了。同学们根据服务器的设计要求修改一下他们的程序(主要是接口部分),每个人为一个单位参加比赛。写好程序,提交到GitHub, TA组织大家在一个网络相对稳定的环境中进行比赛。根据服务器的负载和运行效率,计划用1小时完成1,000轮比赛,最后得出所有人的名次。 谁的程序设计得好,那就拉出来溜溜吧! 比赛地点:北航某机房 规则

  • Java开发环境的搭建

    JDK下载与安装 在Oracle官网找到JDK下载页面,由于企业现在多数用的是JDK8版本,所以下载安装JDK8,JDK8下载 根据系统版本下载对应版本,64位选择下载Windowsx64(32位选择Windowsx86),注意需要注册Oracle账号 双击安装,所有点击下一步(可以选择安装路径),记住安装的路径,路径不能有中文 配置环境变量 我的电脑-->右键-->属性 高级系统设置-->添加系统环境变量JAVA_HOME 输入变量名JAVA_HOME,变量值就是jdk的安装路径 找系统环境变量path-->双击打开新建%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin(如果所有挤在一行,这两个新建值需要用分号分开) 测试JDK是否安装成功 win+R输入cmd 在命令行窗口输入java-version,有信息就成功了 卸载JDK 打开我的电脑属性,在高级系统设置里面,找到环境变量里面的JAVA_HOME,里面的路径就是安装jdk的目录,进入这个目录连带jdk连包删除,然后删除环境变量了的JAVA_HOME,和环境变量pa

  • linux中SCP的用法

     更多IT系统运维、大数据实战、项目管理、商务英语及应用知识,扫描下方二维码关注公众号了解更多!!!                                 SCP用于两个linux之间的数据传输。 示例: 对拷文件夹(包括文件夹本身) scp-r /usr/local/utilroot@192.168.1.65:/usr/local/scp 对拷文件夹下所有文件(不包括文件夹本身) scp  /home/charts/util/*root@192.168.1.65:/home/wwwroot/limesurvey_back/scp  对拷文件并重命名 scp  /home/wwwroot/www/charts/util/a

  • 7-7

    # frombs4importBeautifulSoup fromurllib.requestimporturlopen res=urlopen('http://pythonscraping.com/pages/page1.html') bs=BeautifulSoup(res.read(),'html.parser') print(bs.h1)#获取标签内容复制 BeautifulSoup res.status200 html.parser/lxml/html5lib   fromurllib.requestimporturlopen fromurllib.errorimportHTTPError frombs4importBeautifulSoup importsys defgetTitle(url): try: html=urlopen(url) exceptHTTPErrorase: print(e) returnNone try: bsObj=BeautifulSoup(html,"html.parser") title=b

  • 浅谈BI实时图表实现数据可视化的原理(转)

    如果你已经使用过实时dashboard,或者正打算建立一个,那么,这篇文章可以帮助你理解实时dashboard背后的故事以及实时数据如何展现在你的dashboard中,从而实现数据可视化。 除去端到端之间极短的时间,数据实时可视化主要有四大步骤。这里我们用一张图来展示。 1、捕获数据流 实时数据流使用scrapers、collectors、agents、listeners捕获,并且存储在数据库中。数据库通常是NoSQL数据库,例如,Cassandra、MongoDB,或者有时候是你只是HadoopHive。关系数据库不适合这种高展现的分析。NoSQL数据库的崛起也增强了实时数据分析向他靠拢的趋势。 2、数据流处理 数据流可以通过许多方式处理,比如,分裂、合并、计算以及与外部数据源结合。这些工作由一个容错分布式数据库系统,比如,Storm、Hadoop,这些都是比较常用的大数据处理框架。但是他们却不是实时数据分析的理想选择。因为他们依赖MapReduce面向批量的处理。不过Hadoop2.0允许使用其他计算算法代替MapReduce,这样使得Hadoop在实时分析系统中运用又进了一步。

  • zxing 一维码部分深入分析与实际应用,识别卡片数量,Android数卡器

      打算修改zxing源码应用到其它方面,所以最近花了点时间阅读其源码,无意中找到这篇博客,条码扫描二维码扫描——ZXingandroid简化源码分析 对过程的分析还是可以参考的.原作者给出的一个基本的UML序列图:  (图像引用自http://blog.csdn.net/doonly2009/article/details/12175997) 结合上面的序列图,本文将本zxing一维码部分的源码进行解析,有不对的地方忘大家给予指正,所有内容仅供大家参考.更正上图的一个小错误,DecodeThead是被CaptureActivityHandler调用decodeThread.start()方法启动的,而不是在构造方法中触发的.  部分一,环境搭建 2014.1.14    从这里下载工程文件,导入到Eclipse中(我的环境,windows,eclipse).这个工程文件是把一些代码打包成了jar文件,这反而不利于文件的分析.我们这里利用从官网下载的源码重新建立一个库工程文件,方便我们的代码分析. 1,core.jar文件打包过程.   这里的

相关推荐

推荐阅读