多用戶同時請求 Action 寫入同一伺服器檔案,嘗試 `Mutex` (跨進程互斥體) 失效 (Web 應用多進程/多機部署時 Mutex 不共享)。
在 Web 應用中使用 **進程級鎖 (`Mutex`, `lock`)** 是反模式:
var fileInfo = new FileInfo(path);
if (!fileInfo.IsReadOnly) { // 或檢查自訂 .lock 檔案是否存在
// 寫入前設為 ReadOnly 或建立 .lock 檔
try { File.WriteAllText(path, content); }
finally { fileInfo.IsReadOnly = false; File.Delete(lockPath); }
} else {
// 返回「系統繁忙,請稍後再試」
}
| 場景 | 推薦方案 |
|---|---|
| 單機、低併發、內部工具 | 檔案 ReadOnly 標記 / .lock 檔案 |
| 單機/多實例、中等併發、有資料庫 | 資料庫行鎖 / 佇列 |
| 高併發、微服務、跨機房 | Redis Redisson 分散式鎖 + 佇列 |
核心:拋棄進程 Mutex,採用資料庫/Redis/佇列實現跨進程/跨機器的寫入序列化。