c# begin & end.

本文探讨了在.NET框架中使用Begin和End方法进行异步IO操作的行为。通过观察发现,Begin方法仅用于注册事件,而真正的线程挂起发生在.NET框架内部,End方法则用于处理IO完成后的后续操作。

begin & end

1.
begin的时候,应该是只注册了事件。和io没有交集,马上就进入了下一条语句。
而回调的事件,如果没有触发,并不会立刻有线程去执行这个回调方法。

2.
当接受到连接,或数据,从一般来说,应该是操作系统,马上唤醒挂起的线程。
而begin & end , 测试发现,并没有挂起任何线程,那么估计是 .net 框架已经帮我们启动了新线程 挂断在 等待io上,所以vs并不知掉。
一旦有数据到来,操作系统唤醒 .net 框架的线程,而这个线程马上会执行我们在begin中注册的事件。

3.
end
网上都说有线程挂起在end上。打断点发现。根本不会有线程挂断在end上。这个。。。。。。。。。

 

所以,begin只注册事件。当有对应事件触发后,会有另外一个线程来调用 回调函数,当执行到end 的时候,可能会有一些不可告人的事情处理。
而不是begin之后,马上有线程执行回调,并挂断在end上。

 

4,

观察了下vs   的线程运行时间,猜测是.net的线程挂起在等待io上,而不是我们的end上。有事件,就调用注册的事件。

转载于:https://www.cnblogs.com/lsfv/p/8243726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值