.net 关于异步和线程

很早以前看Juval Lowy 的.net编程的时候,看到了异步和线程的章节,受益匪浅,刚刚在图书馆看书的 时候突然不知怎么的想到了。。回来总结一下哈~

对于多线程处理,有一个很关键的是资源问题,这个在数据库里经常遇到,有时候在对资源的使用上没有限制的时候,可以用异步

有四种方式

1,等待

2,阻塞

3,循环等待

4,完成时回调(当然推荐这种)

异步使用的是 BeginInvoke() 和  EndInvoke()

当然首先得了解 IAsyncResult 借口类 和 AsyncResult 类  ,详细信息可以查madn

一般简单的异步,可以使用如下形式:

 

IAsyncResult m_AsyncResult;

m_AsyncResult  opp.BeginInvoke(lhs,rhs,null,null);

AsyncResult asyncResult = (AsyncResult )m_AsyncResult;

调用   asyncResult.AsyncDelegate 获得 opp;

result = opp.EndInvoke(m_AsyncResult);

 

这种方式是你想获得异步结构的时候 就去那结果,但是并不确定,到底是否有没有结果,所以推荐使用 完成时回调函数

代码如下:

 

opp.BeginInvoke(参数, OnMC, null);

AsyncResult resultobj = (AsyncResult)asyncresult;
BinaryOperation opptmp = (BinaryOperation)resultobj.AsyncDelegate;

result = opptmp.EndInvoke(asyncresult);

//尽早回收资源,避免理论上的资源泄漏    ( 当应用分发异步调用的速度比.net回收资源素缎更快时 ?  )

asyncresult.AsyncWaitHandle.Close();    

 

 

但是更多的时候我们还是的自己进行线程的处理

对于线程处理有很多方法

但是为了避免死锁,要用lock

而lock 其实就是使用了Monitor 监视器

相当于

try

{

   Monitor.Enter(obj);

   obj.methods();

}

catch

{}

finally

{

   Monitor.Exit(ojb);

}

 

 

Juval Lowy 提供了一些例子,通过lock(this)来促进松耦合

 

当然进程还有很多值得研究的东西,比如 使用 .net  的 [Synchronization] 修饰 进行  自动同步。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值