问题标签 [try-finally]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6469 浏览

c# - C# 中 try/finally 的开销?

我们已经看到很多关于何时以及为什么使用try/catchtry/ catch/的问题finally。而且我知道try/肯定有一个用例finally(特别是因为它是using语句的实现方式)。

我们还看到了有关try/catch 和 exceptions 开销的问题。

然而,我链接到的问题并没有谈到只尝试最终的开销。

假设块中发生的任何事情都没有异常,try确保finally语句在离开try块时执行(有时通过从函数返回)的开销是多少?

同样,我只问try/ finally,不catch,不抛出异常。

谢谢!

编辑:好的,我将尝试更好地展示我的用例。

我应该使用哪个,DoWithTryFinally或者DoWithoutTryFinally

这种情况过于简单,因为只有两个返回点,但想象一下,如果有四个……或十个……或一百个。

在某些时候,我想使用try/finally出于以下原因:

  • 遵守 DRY 原则(尤其是当退出点的数量越来越多时)
  • 如果事实证明我的内部函数没有抛出异常是错误的,那么我想确保this.Working设置为false.

因此,假设考虑到性能问题、可维护性和 DRY 原则,对于多少个退出点(特别是如果我可以假设所有内部异常都被捕获),我想招致与try/相关的任何性能损失finally

编辑#2:我将名称更改this.Workingthis.IsBusy. 抱歉,忘了说这是多线程的(尽管实际上只有一个线程会调用该方法);其他线程将轮询以查看对象是否正在工作。如果工作按预期进行,返回值只是成功或失败。

0 投票
11 回答
144553 浏览

java - Java Try Catch finally 没有 Catch 的块

我正在审查一些新代码。该程序只有一个 try 和一个 finally 块。由于排除了 catch 块,如果 try 块遇到异常或任何可抛出的东西,它是如何工作的?它只是直接进入finally块吗?

0 投票
3 回答
2073 浏览

java - 在 finally 块中对象引用设置为 null

为什么输出是 CoolReturn,而不是 null?

问候,
Mahendra Atheria

0 投票
3 回答
225 浏览

java - 在 finally 块中恢复保存的值?

我现在已经在几个不同的地方看到了这种模式,但我不确定它的确切用途或为什么需要它。鉴于我在优质项目中见过它,我相信它很有用,但我想了解它而不是盲目地遵循它。我在 Servlet 过滤器和 Struts2 拦截器中特别看到了这种模式(在概念上与过滤器非常相似)。

这是来自 Google Guice (Servlet) 3.0 的示例:

恢复 finally 块中的值有什么需要或好处?

0 投票
5 回答
2063 浏览

java - 关闭嵌套阅读器

从文本文件读取时,通常会创建 aFileReader然后将其嵌套在BufferedReader. 阅读完毕后,我应该关闭两个阅读器中的哪一个?有关系吗?

当谈到异常安全时,我有点偏执。当BufferedReader构造函数抛出异常时会发生什么?它会关闭嵌套阅读器吗?还是保证不扔?

0 投票
2 回答
20336 浏览

python - 在允许关闭数据库时关闭 cx_Oracle 连接

当数据库启动时,以下cx_Oracle代码可以正常工作:

但是,如果在我运行此脚本时数据库恰好关闭,NameError则会引发 a:

这对我来说很有意义: cx_Oracle无法实例化连接,因此变量conn从未设置,因此没有close()方法。

在 Python 中,确保您的数据库连接关闭,同时仍然优雅地处理关闭数据库的情况的最佳方法是什么?

做以下事情对我来说似乎是一个巨大的kludge:

0 投票
3 回答
677 浏览

.net - 关于使用“using”和“finally”清理资源

是否存在需要以下结构的情况?

或者,是否应该在隐式调用中执行所有清理任务?something.Dispose()


这是有问题的代码:

注意:我已经定义了这个Parameter类,所以这个函数的用户不必SqlParameter直接处理 s 的创建。类的SqlParameter属性Parameter可用于检索SqlParameter.

在某些时候,我的程序执行以下操作(无法发布代码,因为它涉及很多类;基本上,我有一个创建大量对象的迷你框架):

  1. 创建一个 s 数组Parameter
  2. GetDataTable('sp_one', parameters).
  3. GetDataTable('sp_two', parameters).
0 投票
3 回答
532 浏览

delphi - 提取嵌套的 try/finally 块

您如何将嵌套的 try/finally 块从例程“提取”到可重用实体中?说我有

并想要类似的东西

我希望它具有与嵌套原始文件相同的异常安全性。TDoSomething.Init将 ResourceN 变量初始化为零并进行一些if Assigned(ResourceN) then检查是否足够TDoSomething.Done

0 投票
4 回答
6044 浏览

c# - 时间:2019-06-01 标签:c#yield and try-finally

如果我有如下协程,finally 块中的代码会被调用吗?

0 投票
2 回答
1867 浏览

java - 在 finally 块完成后抛出 NullPointerException

我正在尝试制作一款 Android 游戏,并且我正在关注一些代码示例以使我的游戏循环正常工作。它涉及制作一个新线程。在该run()方法中,我有一个 try/finally 块。在 finally 块执行后NullPointerException会抛出一个。我不知道为什么,似乎没有什么是空的,即使是空的,也没有什么引用任何空的。我以为可能this是空的,但似乎不是。这是我认为相关的代码:

线程的创建:

谢谢!