public int test()
{
 try
 {
   return 1;
 }
 finally
 { 
    dosomething();  //此处的代码在方法返回后,何时才会执行?执行时不是不在一个新线程中执行?
 }
}

解决方案 »

  1.   

    dosomething();  执行完了再Return
      

  2.   

    这种结构是经常用到的,比如连接数据库时,通常都会在finally位置写断开与数据库连接的代码,为的就是保证一定会与数据库断开连接。
      

  3.   

    finally
    怎么都要执行,你为什么不把Return也放里面?
      

  4.   

    finally中的语句是在方法返回后.必须执行的.
    但问题是返回后多久?(什么时候)
    在哪里执行?(新线程中.还是当前线程)
      

  5.   

    这样子都不需要try了吧,要不就弄个if判断一下
      

  6.   

    楼上的兄弟解释的很清楚了,写段代码自己瞧吧!<script language="JavaScript">
    <!--
    var t = -1;
    function a()
    {
        
        try
        {
            return 1;
        }
        finally
        {
            alert("t: " + t);
        }
    }
    t = a();
    alert("t: " + t);
    //-->
    </script>
      

  7.   

    晕,上边居然没人讲呀,哈!注意:如上例,finally 在 return 语句执行前被执行!如果有异常的话,在 throw 前被执行。找本儿参考手册一看就清楚了。
      

  8.   

    先执行return 后执行finally 是否多线程不知道
      

  9.   

    先执行return 不管执行是否成功都执行finally ,至于finally 在哪个线程,我测试了一下,得到两个当前线程名都是空。估计应该是一个线程,,要不高手在测测把
      

  10.   

    public int test()
    {
     try
     {
       return 1;
     }
     finally
     { 
        dosomething();  //此处的代码在方法返回后,何时才会执行?执行时不是不在一个新线程中执行?
     }
    }dosomething();  执行完了再Return
    就这个代码看是不存在多线程的。
      

  11.   

    dosomething();  执行完了再Return
    你跟踪一下下就知道了啦!
      

  12.   

    这段 finally{} 中的 dosomething() 永远不会被执行。
    因为代码在执行到return后,就直接跳出函数了。所有后面的代码都不会执行。
      

  13.   

    一般finally{}一定会被执行的。
    但是如果在try{}中直接使用return,当前函数将直接返回1,按照程序的执行顺序,retrun后的所有代码都是不会被执行的。
      

  14.   

    To redbb(....DB & DEV....抵制日货,人人有责...),
    不好意思,我测试了一下, dosomething() 会执行。
      

  15.   

    static int Main(string[] args)
            {
                try
                {
                    Console.WriteLine("In Main Try Module");
                    return 1;
                }
                finally
                {
                    Console.WriteLine("In Main finally Module");
                    Console.Read();
                }
            }
    执行结果如下:In Main Try Module
    In Main finally Module
    那么是不是很明显说明 FINALLY 块一定被执行, RETURN不起所谓"以下代码不可能被执行"的作用.
      

  16.   

    finally一定会执行。return语句执行后会将return的值存放在临时变量中,然后执行finally语句。finally当然会在同一线程执行,绝不会在新线程中执行。finally中不可以有return语句(编译通不过,但JAVA是允许的)通常如果return的值可能被finally语句改变,建议将return语句放在try-finally块的外面,这样比较清晰。
      

  17.   

    finally是无条件执行的,
    楼主看看msdn就明白了
      

  18.   

    using System;
    using System.Text;namespace ConsoleApp
    {
        class Class1
        {
            static int d = 0;
            static void Main()
            {
                Console.WriteLine("Main1:" + test());
                d++;
                Console.WriteLine("Main2:" + d);
                Console.ReadLine();
            }
            static public int test()
            {
                try
                {
                    return getInt();
                }
                finally
                {
                    d++;
                    Console.WriteLine("Finally:" + d);
                    System.Threading.Thread.Sleep(2000);
                }
            }
            static int getInt()
            {
                Console.WriteLine("Return:" + d);
                return d;
            }
        }
    }
    简单测试了一下..
    www_123du_com(鼠·神·泪)的为最佳答案.