diff --git a/src/NServiceBus.Core/Transports/Learning/AsyncFile.cs b/src/NServiceBus.Core/Transports/Learning/AsyncFile.cs index 754cdafba6..98e508059d 100644 --- a/src/NServiceBus.Core/Transports/Learning/AsyncFile.cs +++ b/src/NServiceBus.Core/Transports/Learning/AsyncFile.cs @@ -121,7 +121,7 @@ public static async Task Move(string sourcePath, string targetPath, Cancel if (!IsFileLocked(targetPath)) { - break; + return true; } await Task.Delay(100, cancellationToken).ConfigureAwait(false); @@ -129,7 +129,7 @@ public static async Task Move(string sourcePath, string targetPath, Cancel count++; } - return true; + return false; } static bool IsFileLocked(string filePath) diff --git a/src/NServiceBus.Core/Transports/Learning/DirectoryBasedTransaction.cs b/src/NServiceBus.Core/Transports/Learning/DirectoryBasedTransaction.cs index 00d2286fc9..4680e63246 100644 --- a/src/NServiceBus.Core/Transports/Learning/DirectoryBasedTransaction.cs +++ b/src/NServiceBus.Core/Transports/Learning/DirectoryBasedTransaction.cs @@ -19,12 +19,19 @@ public DirectoryBasedTransaction(string basePath, string pendingDirName, string public string FileToProcess { get; private set; } - public Task BeginTransaction(string incomingFilePath, CancellationToken cancellationToken = default) + public async Task BeginTransaction(string incomingFilePath, CancellationToken cancellationToken = default) { Directory.CreateDirectory(transactionDir); FileToProcess = Path.Combine(transactionDir, Path.GetFileName(incomingFilePath)); - return AsyncFile.Move(incomingFilePath, FileToProcess, cancellationToken); + var succeeded = await AsyncFile.Move(incomingFilePath, FileToProcess, cancellationToken).ConfigureAwait(false); + if (succeeded) + { + return true; + } + + Directory.Delete(transactionDir, true); + return false; } public async Task Commit(CancellationToken cancellationToken = default)