我有一個場景,我的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