diff --git a/src/ReC.Application/RecActions/Commands/InvokeRecActionCommand.cs b/src/ReC.Application/RecActions/Commands/InvokeRecActionCommand.cs index 4d6ad11..e8ae005 100644 --- a/src/ReC.Application/RecActions/Commands/InvokeRecActionCommand.cs +++ b/src/ReC.Application/RecActions/Commands/InvokeRecActionCommand.cs @@ -21,14 +21,24 @@ public class InvokeRecActionCommandHandler(ISender sender, IHttpClientFactory cl var http = clientFactory.CreateClient(); + using var semaphore = new SemaphoreSlim(5); + var tasks = actions.Select(async action => { - var method = new HttpMethod(action.RestType.ToUpper()); - var msg = new HttpRequestMessage(method, action.EndpointUri); + await semaphore.WaitAsync(cancel); + try + { + var method = new HttpMethod(action.RestType.ToUpper()); + var msg = new HttpRequestMessage(method, action.EndpointUri); - var response = await http.SendAsync(msg, cancel); - var body = await response.Content.ReadAsStringAsync(cancel); - var headers = response.Headers.ToDictionary(); + var response = await http.SendAsync(msg, cancel); + var body = await response.Content.ReadAsStringAsync(cancel); + var headers = response.Headers.ToDictionary(); + } + finally + { + semaphore.Release(); + } }); await Task.WhenAll(tasks);