ErrorObject OpenAsync(Action<ErrorObject>arg_fnRet)
ErrorObject OpenAsync(Action<ErrorObject>arg_fnRet)
public static ErrorObject Open(this ReadWrite arg_rw,IPEndPoint arg_ipport)
{
var smph = new Semaphore(0, 1);
var eo = ErrorObject.True;
eo = arg_rw.OpenAsync(arg_ipport, eoi =>
{
eo = eoi;
smph.Release();
});
if(eo.IsFalse)
return eo;
smph.WaitOne();
return eo;
}
上面调用其实有可能是有问题的
eo = arg_rw.OpenAsync(...) 这个eo用于检测arg_rw.OpenAsync在初期是否出现错误,一般都是没有错误的,所以可以认为总是返回True
如果OpenAsync是使用Sync(同步)模式实现了Action()而且返回了false,这时就出现了问题!
1. arg_OpenAsync开始运行
2. Action同步执行,eo = eoi; eoi是False , smph.Release();(此时由于OpenAsync使用了Sync实现,所以smph无关紧要)
3.arg_OpenAsync执行完毕,由于没有错误所有返回的是一个ErrorObject.True , 所以此时 eo 被赋值了新值 ErrorObject.True
4. 最后得到的结果错误!
正确的写法:
public static ErrorObject Open(this ReadWrite arg_rw,IPEndPoint arg_ipport)
{
var smph = new Semaphore(0, 1);
var eo = ErrorObject.True;
var eoI = ErrorObject.True;
eo = arg_rw.OpenAsync(arg_ipport, eoi =>
{
eoI = eoi;
smph.Release();
});
if(eo.IsFalse)
return eo;
smph.WaitOne();
return eoI;
}
ErrorObject OpenAsync(Action<ErrorObject>arg_fnRet)的更多相关文章
- 正式学习React(五) react-redux源码分析
磨刀不误砍柴工,咱先把react-redux里的工具函数分析一下: 源码点这里 shallowEqual.js export default function shallowEqual(objA, ...
- React系列——react-redux之connect方法解析
connect简介 前方高能预警,有耐心才能看完文章!! react-redux仅有2个API,Provider和connect,Provider提供的是一个顶层容器的作用,实现store的上下文 ...
- redux-amrc:用更少的代码发起异步 action
很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results
原文:Controllers, Actions, and Action Results 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:许登洋(Seay) Action 和 acti ...
- java中Action层、Service层和Dao层的功能区分
Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...
- SpringMVC的Action在同一时间里只允许同一个浏览器的单次进入?
最近用SpringMVC写了一个很简单的测试程序,代码如下: @Controller public class LongTimeTaskController { @RequestMapping(val ...
- No result defined for action com.lk.IndexAction and result success
意图访问一个 /es/index.action 竟然出现: [SAE ] ERROR [05-11 13:54:32] [http-80-5] com.opensymphony.xwork2.util ...
- 实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器
MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Fi ...
随机推荐
- RecyclerView的万能切割线
效果图: 用法: 加入默认切割线:高度为2px.颜色为灰色 mRecyclerView.addItemDecoration(new RecycleViewDivider(mContext, Linea ...
- 吃我一记咸鱼突刺——使用板载RTC定时开机
前言 原创文章,转载引用务必注明链接.水平有限,欢迎指正. 2016年3月30日 Lemuntu(Base On Jessie) 3.10.37 原载于Lemaker论坛.汇总于此. 看ATC2603 ...
- TCP 的那些事儿(下)(转)
TCP的RTT算法 从前面的TCP的重传机制我们知道Timeout的设置对于重传非常重要, 设长了,重发就慢,没有效率,性能差: 设短了,重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多 ...
- DirectX11 学习笔记5 - D3DXMath 库
directx11 特别推出了一个数学库 用于向量 矩阵的计算.并且使用128位 同一时候计算4条32位数据 (SIMD) 之前基本是用的directx10math.h这个头文件. 这个数学库既然是 ...
- 让Spring Boot启动更快
关注公众号:锅外的大佬, 每日推送国外技术好文,帮助每位开发者更好成长 原文链接:https://dev.to/bufferings/lets-make-springboot-app-start-fa ...
- linux输入子系统(5) - 学习框架
注:本系列转自: http://www.ourunix.org/post/290.html input子系统学习系列文章,是我在实际开发过程中遇到也是必须啃下去的第一个Linux驱动,所以有必要记载下 ...
- mysql limit分页优化方法分享
同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是 ...
- 【配置关系】—Entity Framework实例详解
实体间的关系,简单来说无非就是一对一.一对多.多对多,根据方向性来说又分为双向和单向.Code First在实体关系上有以下约定: 1. 两个实体,如果一个实体包含一个引用属性,另一个实体包含一个集合 ...
- leetcode笔记:Pascal's Triangle
一. 题目描写叙述 Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows ...
- Cooperating sequential processes》,这篇论文提出了大名鼎鼎的概念信号量,Java里面用于线程同步的wait/notify也是信号量的一种实现。
闲话高并发的那些神话,看京东架构师如何把它拉下神坛 https://mp.weixin.qq.com/s/lAqn8CfSRta9iSvOR1Le6w