问题描述
自己百度了知道using()会在{}执行结束后通过Disposable释放()中的对象,会不会在释放对象没结束的时候,又开始执行了循环代码和报错的提示如下:(单步执行没有错误)如上代码运行的时候,立马报错,但是加上Thread.Sleep(200);如下代码、开始不会报错,但是过一段时间仍会报错、大家来分析下原因:
解决方案
解决方案二:
知道的过来给说说~~
解决方案三:
UPMyself
解决方案四:
againup
解决方案五:
提示"Addressinuse"socket还没完全关闭吧
解决方案六:
贴出你的ZmqSocket类的Dispose()方法源代码。没有看过源代码,空谈“释放”这个词儿,对“到底Dispose()里边干什么工作”都不知道,你很容易乱用“释放”这两个字。
解决方案七:
Dispose是不会在没执行完成的时候就返回的。但是,如果ZmqSocket的Dispose方法中(例如Socket非托管资源的释放)在真正释放非托管资源之前便立即返回了(例如设置了Linger),这样的话可能会发生你遇到的情况,所以需要检查的还是ZmqSocket这个类的Dispose方法。
解决方案八:
谢谢大家的回帖,我是这样认为的:在using语句执行完,会自动调用((IDisposable)skt).Dispose();来释放using括号中的对象,单步执行的时候是不会出错的,我将代码改为下面时同样会出上面的错,但是取消注释这句代码Thread.Sleep(2000);程序是不会报错的
解决方案九:
没有skt的代码,谁知道它里面到底干了什么有可能本身就是单例模式
解决方案十:
using会在程序超过using代码块的时候,释放using所创建的对象。1.zmqsocket里面怎么释放资源的2.研究一下socket是怎么绑定的,有可能这里问题
解决方案十一:
引用8楼Z65443344的回复:
没有skt的代码,谁知道它里面到底干了什么有可能本身就是单例模式
有可能是单例。
解决方案十二:
不是单例,这个根本就是个静态类很明显Create方法是个静态方法,而CreateSocket是另一个静态方法既然是两个静态方法,怎么能保证每次出来的socket对象不是同一个对象?如果根本就是同一个对象,那当然这个还没释放就执行下一个的bind,会报错:地址已经添加过
解决方案十三:
现在可以了,代码如下: