我的需求是这样的,我使用了微软的entityframework,我想封装一下context,使context能在同一个线程上下文的多个method共享(注意:不是web,没httpRequest).C#默认调用线程池中的线程,我能否知道该线程返回线程池前,或者自己开辟的线程销毁前,进行一次回调,这时我便可以释放context资源,Task虽然有continueComplete,但限制太大,不通用.
C#默认调用线程池中的线程
没懂,什么时候默认使用线程池了?
自己开辟的线程销毁前,进行一次回调
Thread t = new Thread(callback => { Thread.Sleep(5000); //do something ((Action)callback)(); }); Action output = () => Console.WriteLine("call back"); t.Start(output);
以上例子只是简单用Thread传参来实现callback,你若不希望每次都手动指定callback,可以自己封装Thread,在执行主体的finally里去释放资源。
但是自己创建线程会消耗资源,若我想利用线程池中的线程呢?
@pigwing: 你先说下你是“怎么利用线程池中德线程的”,代码咋写的。
@水牛刀刀: 那请问,若我想设计成,多个业务逻辑共享一个context,但程序员无需关心context是如何获取,如何销毁,那请问如何设计这个解决方案呢.
@pigwing: 那你就把context封装到一个对象里,其他程序员只能通过工厂获取到这个对象就可以了啊。
internal class ContextObject : IDisposable { public ContextObject(DataContext context) { //保存起来 } ~ContextObject() { //释放资源 } } public class ContextProvider { public static ContextObject Create() { //其他人通过这个工厂方法去获取ContextObject实例 } }
@水牛刀刀: 我想像java中的hibernate,把dbContext在线程上下文共享,这样我就不用关系如何获取dbContext了.请问能否实现?