簡體   English   中英

視窗。 服務多個實例處理來自同一單個目錄重復的文件

[英]Windows. Service multiple instances processing files from same single directory duplication

我有.net Windows服務,該服務從文件夾獲取圖像文件列表並進行一些轉換,然后將轉換后的文件發送到另一個目錄。 我想通過添加另一個觀看同一文件夾的serVice實例來實現更高的吞吐量。 我希望2個實例獨立處理文件,而不進行任何重復處理。 可以使用哪些模式? 文件鎖定是否可以解決此問題? 不想使用數據庫或任何其他消息傳遞平台。 如果需要,我可以使用文本文件等創建同步。

  1. 如果使用.net,我將考慮創建多個線程(在.net中使用TPL),這些線程將用於並行處理文件。 這樣,您就可以控制整個過程。 因此,無需跟蹤哪個進程(exe)正在處理文件,沒有數據庫,沒有鎖定等。

  2. 但是,如果您希望有多個進程來處理文件,則同步處理的一種方法是使用互斥鎖。

我將在解決方案1中使用此選項。即在一項服務中使用TPL(多線程)。 並且也使用Mutexes。 這樣,您可以受益於多個線程和多個服務。 希望這就是你所追求的。

https://msdn.microsoft.com/zh-CN/library/bwe34f1k(v=vs.110).aspx

在處理任何文件之前,請創建一個具有特定名稱的Mutex,如果已授予所有權,則繼續處理該文件。 如果未授予所有權,則可以放心地假設另一個進程或另一個線程(在同一應用程序內)已獲取此互斥鎖的鎖,這意味着另一個進程/線程已在處理文件。

樣例代碼:

var fileMutex = new Mutex(true, "File Name", out mutexWasCreated);
if (mutexWasCreated){
    //Some other process/thread is processing this file, so nothing to do
}
else {
    //Start processing the file
}

如果一個服務(exe)發生故障,則線程將死亡,這意味着互斥體將被釋放,並且這些文件將可供另一進程處理。

暫無
暫無

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

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