首页 新闻 会员 周边

请问C#关于线程是否有挂起或销毁前的回调呢?

0
悬赏园豆:10 [已解决问题] 解决于 2012-09-04 22:33

我的需求是这样的,我使用了微软的entityframework,我想封装一下context,使context能在同一个线程上下文的多个method共享(注意:不是web,没httpRequest).C#默认调用线程池中的线程,我能否知道该线程返回线程池前,或者自己开辟的线程销毁前,进行一次回调,这时我便可以释放context资源,Task虽然有continueComplete,但限制太大,不通用.

pigwing的主页 pigwing | 初学一级 | 园豆:168
提问于:2012-09-03 11:13
< >
分享
最佳答案
0

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里去释放资源。

 

收获园豆:10
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-09-03 11:25

但是自己创建线程会消耗资源,若我想利用线程池中的线程呢?

pigwing | 园豆:168 (初学一级) | 2012-09-03 11:27

@pigwing: 你先说下你是“怎么利用线程池中德线程的”,代码咋写的。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-09-03 11:30

@水牛刀刀: 那请问,若我想设计成,多个业务逻辑共享一个context,但程序员无需关心context是如何获取,如何销毁,那请问如何设计这个解决方案呢.

pigwing | 园豆:168 (初学一级) | 2012-09-03 11:43

@pigwing: 那你就把context封装到一个对象里,其他程序员只能通过工厂获取到这个对象就可以了啊。

internal class ContextObject : IDisposable
{
      public ContextObject(DataContext context)
      {
             //保存起来
      }

      ~ContextObject()
      {
             //释放资源
      }
}

public class ContextProvider
{
      public static ContextObject Create()
      {
            //其他人通过这个工厂方法去获取ContextObject实例
      }
}
水牛刀刀 | 园豆:6350 (大侠五级) | 2012-09-03 12:58

@水牛刀刀: 我想像java中的hibernate,把dbContext在线程上下文共享,这样我就不用关系如何获取dbContext了.请问能否实现?

pigwing | 园豆:168 (初学一级) | 2012-09-03 14:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册