我有一个场景,我的C#类有两种方法,分别称为DoThis()
和DoThat()
,它们以任何顺序被外部调用者独立调用。这两种方法都需要通过以下方式进行同步:如何在C#中实现与定时器的同步
- 到
DoThis()
通话结束后,与DoThat()
执行 - 着手
DoThat()
通话结束后等待至少t1
秒,在继续之前等待至少t2
秒与DoThis()
执行
所以基本上在伪代码:
static SomeCustomTimer Ta, Tb;
static TimeSpan t1, t2;
public static void DoThis()
{
if(Tb.IsRunning())
Tb.WaitForExpiry();
DoStuff();
Ta.Start(t1);
}
public static void DoThat()
{
if(Ta.IsRunning())
Ta.WaitForExpiry();
DoOtherStuff();
Tb.Start(t2);
}
DoStuff()
和DoOtherStuff()
是不长期运行的方法,不以其他方式共享资源。通常DoThis()
和DoThat()
不会被同时调用。但我仍然需要防范潜在的僵局。
我怎样才能最好地实现DoThis()
,DoThat()
在C#?
编辑 我现在的情况很简单,因为没有任意数量的线程调用这些函数。为简化起见,有一个调用者线程以任意顺序调用这些函数。所以这两个方法不会被同时调用,而是调用者将以任何顺序逐一调用这些方法。我没有在调用者线程的代码控制,所以我想执行到DoThis(),找时间做()连续调用之间的延迟。
只是想检查:你要“interupt”的其他线程的一段时间执行 - 在现在身在何处执行它是? (所以线程变得根本不需要处理器时间)?我想你可以试着用线程来解决这个问题,但我认为这不会完全预防死锁 - 如果一个线程持有一个锁,并且你暂停它,你希望获得什么? – Carsten
这不会为每次调用“DoThis”或“DoThat”时创建一个无限但延迟的循环吗?那是你要的吗? – Enigmativity
@CarstenKönig不,我不想中断线程执行。我想阻止并发执行,如果另一个线程在一段时间内完成,我也想延迟启动一个线程。 – amo