最近做项目的时候,DAL有基类,继承了IDisposable接口,并在Disposable中释放了DBContext,但是担心不能及时释放,就做了一个静态类,里面用另一个委托来指向释放方法,然后在请求完成后调用了委托。完成后一直发现报错,错误信息为无法完成该操作,因为 DbContext 已释放。自己个蠢蠢的不知道原因,纠结了半天才想起来是不是因为线程共享了静态类,经过试验发现,进程中的线程果然共享了静态类了,静态类中的委托指向了所有线程中的DBContext,导致一个线程执行完成调用委托释放的时候,有的线程还没有执行完,所以报错了。
对于同一个进程中的线程来讲,线程是共享进程的堆的。