Tag: try catch finally

在Windows服务中运行的线程中最终不会执行

任何人都可以解释为什么这个finally块没有被执行? 我已经阅读了关于何时期望最终阻止不被执行的post,但这似乎是另一种情况。 此代码需要TopShelf和log4net。 我正在运行.net 4.5 我想它必须是Windows服务引擎启动未处理的exception,但为什么它在finally块完成之前运行? using log4net; using log4net.Config; using System; using System.Threading; using Topshelf; namespace ConsoleApplication1 { public class HostMain { static void Main(string[] args) { HostFactory.Run(x => { x.Service(s => { s.ConstructUsing(name => new HostMain()); s.WhenStarted(tc => tc.Start()); s.WhenStopped(tc => tc.Stop()); }); x.RunAsLocalSystem(); x.SetServiceName(“TimerTest”); }); } public void Stop() { LogManager.GetLogger(“MyLog”).Info(“stopping”); } […]

从try / catch块返回的产量

正如Eric Lippert在本文中所描述的那样, try/catch子句中不允许yield return 。 有没有一种很好的方法可以得到这样的东西,而不必亲自编写我自己的IEnumerator : public IEnumerable GetData() { var transaction = Session.BeginTransaction()); try { IQuery q = CreateQuery(session); foreach (var result in q.Enumerable()) yield return ProjectResult(result); // <– doesn't work session.Commit(); } catch (Exception ex) { transaction.Rollback(); throw; } finally { transaction.Dispose(); } }

为什么这“最终”执行?

如果你运行下面的代码,它实际上在每次调用goto后执行finally: int i = 0; Found: i++; try { throw new Exception(); } catch (Exception) { goto Found; } finally { Console.Write(“{0}\t”, i); } 为什么?

如果我退出C#中的try / finally块,那么finally中的代码总会运行吗?

它看起来像是根据一些初步测试,但我想知道的是,如果它保证返回或在某些情况下它不能返回? 这对我的应用程序至关重要,但我还没有找到一个用例但它不会返回。 我想获得有关这一主题的专业知识。