|
@@ -15,6 +15,7 @@ using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using EVCB_OCPP.WSServer.Service.DbService;
|
|
|
+using System.Collections.Concurrent;
|
|
|
|
|
|
namespace EVCB_OCPP.WSServer.Service
|
|
|
{
|
|
@@ -72,7 +73,7 @@ namespace EVCB_OCPP.WSServer.Service
|
|
|
private readonly IDbContextFactory<MainDBContext> maindbContextFactory;
|
|
|
private readonly ILogger<ConfirmWaitingMessageSerevice> logger;
|
|
|
private readonly List<NeedConfirmMessage> needConfirmPacketList = new();
|
|
|
- private readonly Dictionary<string, MessageResultWaitObject> asyncWaitingTasks = new();
|
|
|
+ private readonly ConcurrentDictionary<string, MessageResultWaitObject> asyncWaitingTasks = new();
|
|
|
|
|
|
internal async Task Add(string chargePointSerialNumber, int table_id, string requestId, string action, string msg_id, string createdBy, string sendMessage)
|
|
|
{
|
|
@@ -237,7 +238,7 @@ namespace EVCB_OCPP.WSServer.Service
|
|
|
if (waitObject == null)
|
|
|
{
|
|
|
waitObject = new MessageResultWaitObject();
|
|
|
- asyncWaitingTasks.Add(serialNo, waitObject);
|
|
|
+ asyncWaitingTasks.TryAdd(serialNo, waitObject);
|
|
|
}
|
|
|
|
|
|
var task = waitObject.Lock.WaitAsync(token);
|
|
@@ -254,13 +255,15 @@ namespace EVCB_OCPP.WSServer.Service
|
|
|
logger.LogWarning("{msg} not found in db", serialNo);
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ asyncWaitingTasks.Remove(serialNo, out var _);
|
|
|
return waitObject.Result.Message;
|
|
|
}
|
|
|
|
|
|
private MessageResultWaitObject CreateAndAddWaitObject(string serialNo)
|
|
|
{
|
|
|
var waiObj = new MessageResultWaitObject();
|
|
|
- asyncWaitingTasks.Add(serialNo, waiObj);
|
|
|
+ asyncWaitingTasks.TryAdd(serialNo, waiObj);
|
|
|
return waiObj;
|
|
|
}
|
|
|
|