簡體   English   中英

主線程計時器Vs線程

[英]main thread timer Vs Thread

我有一個Windows服務,在主線程上啟動計時器。 計時器的工作是將xml文件加載到內存,對值進行一些處理並將結果保存回文件。 例如,處理可能需要10分鍾。 (讓我們稱這個操作為A)

我還有一個線程,它通過WCF在更新xml文件的同一服務上生成。 (讓我們調用此操作B)

發生的事情是操作A正在運行,操作B在操作A完成之前運行完成。 最終結果是操作A覆蓋了操作B完成的所有工作。

所以我認為我需要做的是:

  1. 當操作A啟動時,如果操作B正在運行,則等待操作B完成然后執行操作A.

  2. 當操作B啟動時,如果操作A正在運行,則等待操作A完成然后執行操作B.

如果我能做到這一點,我認為我不會有問題。

我希望這是有道理的 - 我的等待理論是最好的方法嗎? 我怎樣才能在c#(或者最好的方法)中做到這一點?

謝謝達莫

通過在C#中使用lock語句可以輕松解決這個問題。

所有你需要的是兩個代碼段都可以訪問的某個對象的實例(類型無關緊要)。

public static void MethodA(object lockObject)
{
    lock(lockObject)
    {
        //code that needs to be accessed by just one thread
    }
}

public static void MethodB(object lockObject)
{
    lock(lockObject)
    {
        //code that needs to be accessed by just one thread
    }
}

如果這兩個操作都是從定時器觸發的,那么你應該確保添加額外的等待不會讓你到達執行代碼的時間超過定時器間隔的時間點。 如果你這樣做,你最終會比他們完成更快地解雇新代碼,並且總會有越來越多的實例在運行。 (如果先前的任務仍在運行,則無法解決問題。)

暫無
暫無

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

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