簡體   English   中英

每隔X分鍾c#調度一次

[英]c# thread dispatching every X minutes

我有一個C#程序需要每隔X分鍾調度一個線程,但前提是先前調度的線程(從X分鍾開始)以前還沒有運行。

單獨一個普通的舊計時器將無法工作(因為無論是否先前已調度的進程已完成,它每X分鍾調度一次事件)。

將要發送的進程在執行任務所花費的時間內變化很大 - 有時可能需要一秒鍾,有時可能需要幾個小時。 如果它從上次啟動時仍在處理,我不想再次啟動該過程。

誰能提供一些有用的C#示例代碼?

您可以在激活另一個線程之前檢查線程是否處於活動狀態。
使用Thread.IsAlive執行此操作。

我認為計時器可以在這種情況下工作。 當計時器過去時,它嘗試獲取同步對象的鎖定。 如果它成功,那么它繼續它的工作。 如果它無法獲得鎖,它知道最后一個線程還沒有完成,所以返回。

如果您使用的是.Net 4.0或更高版本,則可以使用Monitor.TryEnter(object, bool)

bool acquiredLock = false;
try
{
    Monitor.TryEnter(lockObject, ref acquiredLock);
    if (acquiredLock)
    {
        //do your work here
    }
}
finally
{
    if (acquiredLock)
    {
        Monitor.Exit(lockObject);
    }
}

在線程中使用while(True)循環。 記錄循環頂部的開始時間,執行任務,再次獲取時間,計算已消耗的時間並與開始時間進行比較。 如果這小於X,則將差值轉換為ms和Sleep()。

沒有計時器,沒有連續的線程創建,沒有同步,沒有輪詢,沒有任何機會可以同時運行兩個任務實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM