From 2039493c2e1739535d2ccada5f46fcfd7a0e162d Mon Sep 17 00:00:00 2001 From: Anthony Bruno Date: Thu, 15 May 2025 19:31:39 -0700 Subject: [PATCH] Replaced ThreadSafe _userUid with a concurrent dictionary to support logging into multiple databases running within the same thread --- PortaCapena.OdooJsonRpcClient/OdooClient.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/PortaCapena.OdooJsonRpcClient/OdooClient.cs b/PortaCapena.OdooJsonRpcClient/OdooClient.cs index 99ff85b..8b02a94 100644 --- a/PortaCapena.OdooJsonRpcClient/OdooClient.cs +++ b/PortaCapena.OdooJsonRpcClient/OdooClient.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Converters; +using System.Collections.Concurrent; using PortaCapena.OdooJsonRpcClient.Consts; using PortaCapena.OdooJsonRpcClient.Extensions; using PortaCapena.OdooJsonRpcClient.Models; @@ -23,7 +24,7 @@ public sealed class OdooClient private static HttpClient _client; public OdooConfig Config { get; } - [ThreadStatic] private static int? _userUid; + private static readonly ConcurrentDictionary _userUid = new ConcurrentDictionary(); /// /// Can be set to false, if server certificate shall not be validated. @@ -298,8 +299,8 @@ public static async Task> DeleteRangeAsync(OdooConfig odooConfi public async Task> GetCurrentUserUidOrLoginAsync(CancellationToken cancellationToken = default) { - if (_userUid.HasValue) - return await Task.FromResult(OdooResult.SucceedResult(_userUid.Value)); + if (_userUid.ContainsKey(Config.ApiUrl)) + return await Task.FromResult(OdooResult.SucceedResult(_userUid[Config.ApiUrl])); return await LoginAsync(cancellationToken); } @@ -308,7 +309,7 @@ public async Task> LoginAsync(CancellationToken cancellationToke var result = await LoginAsync(Config, cancellationToken); if (result.Succeed) - _userUid = result.Value; + _userUid[Config.ApiUrl] = result.Value; return result; }