gpt4 book ai didi

c# - 使用互斥锁确保异步应用程序的单一实例

转载 作者:行者123 更新时间:2023-12-03 13:16:33 25 4
gpt4 key购买 nike

我正在尝试使用 C# mutex 来确保我的应用程序在单个实例中运行。因此,应用程序在启动时获取全局互斥锁,并在退出时释放它。如果互斥量获取失败,则会显示错误。
该应用程序是一个控制台应用程序,它主要是异步的(主要方法是异步的)。
基本上,互斥锁在 Main 方法的开头被获取,并在它的结尾被释放。
问题是 Main 方法是异步的,它的结束可能在与开始不同的线程上执行。因此,当我尝试释放互斥锁时,我收到“从未同步的代码块调用对象同步方法”异常,因为无法从另一个线程释放互斥锁。但是我不使用互斥锁进行线程间同步,我使用它进行进程间同步。所以我真的不在乎哪个线程释放互斥锁,因为它保证获取和释放不会相互冲突。
我知道有两种方法可以避免此错误:

  • 为互斥量使用单独的线程(该线程将获取互斥量,然后阻塞并等待应用程序退出,然后释放互斥量)
  • 使用带有同步上下文的主线程,这将允许在同一线程上运行等待延续

  • 这两种方式都显得过于繁琐。
    有没有更好的方法来确保异步应用程序的单一实例?

    最佳答案

    虽然您可以使用您提到的任何一种方法,但使用命名信号量而不是命名互斥体可能会更简单。
    与互斥锁不同,信号量不关心哪些线程释放它们。

    关于c# - 使用互斥锁确保异步应用程序的单一实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65342900/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com