C#:从锁定块调用事件

2024-03-01

我通常听说在调用事件侦听器之前解锁所有锁以避免死锁是一个好主意。然而,自从lock {}块可以由 C# 中的同一线程重入,是否可以从锁定块调用事件,或者我是否需要复制相关状态数据并在锁定块外部调用事件?

如果没有,请举例说明何时从某个对象内调用事件会出现问题。lock {} block.

Thanks


我不记得曾经需要从内部引发事件lock陈述。但不难想象事情会变得糟糕。

当您引发事件时,您会将执行推迟到可能不属于您自己的代码。例如,如果您正在编写一些将被其他人使用的库或框架,则尤其如此。在事件处理程序内部,您完全无法控制发生的情况。事件处理程序可以启动一个全新的线程并等待该线程完成(即,Join())返回之前。如果该新线程调用了某个与您的线程锁定相同变量的函数lock, 答对了。僵局。

但除此之外,最佳做法是尽量减少在室内花费的时间。lock以减少锁定的“阻塞点”。如果您在lock,所有的赌注都落空了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#:从锁定块调用事件 的相关文章

随机推荐

  • Android ImageView连续放大和缩小

    有什么办法可以放大和缩小ImageView在Android中不断 我尝试使用下面的代码 但只有一个缩放功能可以工作 缩放 xml
  • iPhone 上 Objective C 中的静态字符串变量

    如何在 iPhone 中创建和访问静态字符串 目标 c 我声明static NSString str OldValue 在A类 如果我在 B 类中为此分配一些值str NewValue 该值对于 B 类中的所有方法都有效 但是 如果我在 C
  • Java线程中的定时器

    我有一个线程负责执行一些过程 我想让这些处理每 3 秒完成一次 我使用了下面的代码 但是当线程启动时 什么也没有发生 我假设当我为计时器定义任务时它会自动执行ScheduledTask在时间间隔内但它根本不做任何事情 我缺少什么 class
  • Swift 中的快速排序出现错误

    我正在 Swift 中使用高阶函数编写快速排序 但它给出了 error Int is not convertible to Int return quickSort array lesser pivot quickSort array gr
  • 使用 WEBrick 为 PHP Web 应用程序提供服务

    我是一名 PHP 开发人员 已经开始学习 Ruby on Rails 我喜欢启动和运行 Rails 应用程序开发是多么容易 我最喜欢的东西之一是 WEBrick 它使您不必为您正在处理的每个小项目配置 Apache 和虚拟主机 WEBric
  • BitBucket WebHook 詹金斯

    我想配置 bitbucket 来触发 jenkins 构建 我花了一些时间研究这个问题 所有答案都来自几年前 但没有找到任何指南 因为从那以后事情似乎发生了变化 我正在尝试做的事情 将位桶推送到特定分支会触发构建 我有什么 Bitbucke
  • 在 IE 中通过 Iframe 传递参数时出现问题

    我正在尝试从我的网站执行 HTTP GET 到通过 iframe 引入的另一个网站 在 Firefox 上 您可以在源代码中看到 iframe src 中存在正确的 url 及其正确的参数 并且它可以工作 在 IE 上 您可以在源代码中看到
  • 函数参数中没有 LHS 的“双右箭头类型”是什么意思

    我无法解释指定为没有 LHS 左侧 的函数参数的 双右箭头类型 例如 gt Int来自 to Int但什么只是 gt Int意思是 例如请参阅第一个参数foo下面的方法 是什么类型f Is it Int gt Int gt Int 对于定义
  • 何时在 Java 中使用 StringBuilder [重复]

    这个问题在这里已经有答案了 一般认为最好使用StringBuilder用于Java中的字符串连接 情况总是如此吗 我的意思是 创建一个StringBuilder对象 调用append 方法和最后toString 已经较小然后将现有字符串与
  • 我无法再使用 npm 安装

    Npm 工作得很好 然后今天我尝试使用以下命令安装 ngui tab npm install ngui tab save 它给了我以下错误 0 info it worked if it ends with ok 1 verbose cli
  • 错误:点太少,无法用 3 个点计算椭圆? -R

    日安 我正在策划一个pca与factoextra包裹 我对每个因素有 3 分 并且想在每个因素周围画上椭圆 但我收到错误Too few points to calculate an ellipse 可以在 3 个点周围绘制椭圆ggplot2
  • 可以在结构声明*之后派生属性吗?

    我正在使用宏来扩展原始结构 pub struct MyTypedNumber pub u32 struct impl my features MyTypedNumber The struct impl my features宏可以实现以下功
  • 使用 Javascript/jQuery 更改 Telerik RadEditor 的值

    我正在尝试使用 Javascript 手动清理 Telerik RadEditor 的 HTML 但我似乎找不到存储该值的正确位置 以便在回发时保存该值 这是我的JS function jQuery fixHash function htm
  • 如何覆盖功能组件中的导航选项?

    要使用类组件覆盖导航选项 它会是这样的 export default class SomeClass extends Component static navigationOptions navigation gt return title
  • Dart JS Interop 0.6.0 和 JS Promises - 解决

    Interop 或 dart2JS 似乎没有明确拦截 JS Promises ServiceWorkerContainer swContain window navigator serworker swContain register wo
  • Wordpress 开发插件时出错 - “您没有足够的权限访问此页面。”

    我刚刚开始学习 WordPress 插件开发 当我从管理员访问我的插件菜单时出现此错误 这是代码 importer php Admin function function oscimp admin include importer admi
  • 如何检查 GTK+3.0 中小部件的类型?

    I saw this https stackoverflow com questions 60112777 find type of gtk widgets帖子 但它是针对 Python 的 所以这对我没有太大帮助 我正在使用 C 进行编程
  • 如何避免 gen_l10n/app_localizations.dart 的 lint 问题“依赖于引用的包”[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在我的 Flutter 应用程序上 我遇到了 lint 规则的问题 依赖于引用的包 https dart lang gi
  • Intel TBB 可以在 AMD 处理器上运行吗? [复制]

    这个问题在这里已经有答案了 可能的重复 AMD多核编程 https stackoverflow com questions 1623975 amd multi core programming Is 英特尔TBB http threadin
  • C#:从锁定块调用事件

    我通常听说在调用事件侦听器之前解锁所有锁以避免死锁是一个好主意 然而 自从lock 块可以由 C 中的同一线程重入 是否可以从锁定块调用事件 或者我是否需要复制相关状态数据并在锁定块外部调用事件 如果没有 请举例说明何时从某个对象内调用事件