【发布时间】:2021-09-16 12:54:55
【问题描述】:
我有一个方法StartProcess()。如果另一个线程同时或在调用EndProcess()之前由相同的初始线程调用相同的方法,我希望此方法抛出异常。
我尝试了Monitor 类,但我不确定如何将其应用于上述案例。我看到的与我正在寻找的内容接近的是:
var obj = new Object();
// Define the critical section.
Monitor.Enter(obj);
try {
// Code to execute one thread at a time.
}
// catch blocks go here.
finally {
Monitor.Exit(obj);
}
我需要指导来处理我所陈述的确切情况。我一直在尝试一整天,但无法让它发挥作用。
【问题讨论】:
-
您为什么要这样做?调用该方法的任何人都需要使用他们自己的同步机制来防止遇到您明确抛出的异常,这意味着您要同步两次。如果您要让此操作处理自己的同步,则在获取锁时它应该有预期的行为,无论是等待(同步还是异步)、跳过该部分等。
-
@Servy 假设方法应该处理它的同步,我怎样才能在代码中实现呢?
-
如果方法应该处理自己的同步,那么它不应该在同时被多个线程调用时抛出,因为您刚刚将其定义为不是异常情况,而是受支持的情况.
-
obj应该是一个字段以锁定 afaics。
标签: c# multithreading locking