Ich enthülle eine API -Methode, die die Anforderung von der Client -App akzeptiert. Diese Anfrage wird an eine andere COM -Bibliothek gesendet, in der sie validiert wird. Basierend auf den Anforderungsdaten kann die Validierung die Antwort auf meinen API -Controller verzögern und zurückgeben. Sobald es validiert wurde, wählen Sie die nächste Anfrage aus der Warteschlange (falls etwas, das während der vorherigen Anfrage erhalten wurde) für denselben Validierungsprozess. < /p>
class ApiController : ControllerBase
{
private readonly ConcurrentQueue _requestQueue = new ConcurrentQueue();
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
private bool _isProcessing = false;
private readonly object _lock = new object();
public async Task Validate(RequestModel requestModel)
{
_requestQueue.Enqueue(requestModel);
lock (_lock)
{
if (_isProcessing)
{
return;
}
_isProcessing = true;
}
Task.Run(
async () =>
{
while (_requestQueue.TryDequeue(out var request))
{
await _semaphore.WaitAsync();
// call COM library with request data
_semaphore.Release();
}
lock (_lock)
{
_isProcessing = false;
}
});
}
}
< /code>
hat diesen Code ausprobiert, funktioniert aber nicht. Wenn die 1. Anfrage mehr Zeit benötigt, um zu validieren, und die 2. Anfrage vor dem 1. validiert werden.
Ich enthülle eine API -Methode, die die Anforderung von der Client -App akzeptiert. Diese Anfrage wird an eine andere COM -Bibliothek gesendet, in der sie validiert wird. Basierend auf den Anforderungsdaten kann die Validierung die Antwort auf meinen API -Controller verzögern und zurückgeben. Sobald es validiert wurde, wählen Sie die nächste Anfrage aus der Warteschlange (falls etwas, das während der vorherigen Anfrage erhalten wurde) für denselben Validierungsprozess. < /p> class ApiController : ControllerBase { private readonly ConcurrentQueue _requestQueue = new ConcurrentQueue(); private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
private bool _isProcessing = false;
private readonly object _lock = new object();
public async Task Validate(RequestModel requestModel) { _requestQueue.Enqueue(requestModel); lock (_lock) { if (_isProcessing) { return; } _isProcessing = true; } Task.Run( async () => { while (_requestQueue.TryDequeue(out var request)) { await _semaphore.WaitAsync(); // call COM library with request data _semaphore.Release(); } lock (_lock) { _isProcessing = false; } }); } } < /code> hat diesen Code ausprobiert, funktioniert aber nicht. Wenn die 1. Anfrage mehr Zeit benötigt, um zu validieren, und die 2. Anfrage vor dem 1. validiert werden.
(Änderungen unten)
Ich suche nach einer Möglichkeit, ein paar SQL -Abfragen in sequentieller Reihenfolge zu senden, aber in einem anderen Thread auszuführen, damit die Anwendung nicht für den...
In der Anwendung exportieren wir die Daten nach Excel und speichern sie. Nach dem Öffnen der Datei gibt es eine Spalte „Referenznummer“, die aus 16 Ziffern besteht und in Exponentialform angezeigt...
Ich habe eine PHP-Website, die von meinem Raspberry Pi 4 mit 8 GB RAM und Apache2 gehostet wird. Es ist nur eine Website, die die Uhrzeit anzeigt, während im Hintergrund Videos abgespielt werden. Die...
Die Anforderung für mein Projekt besteht darin, einen Aktualisierungsmechanismus für In-Memory-Daten in bestimmten Zeitintervallen in einer Spring-Anwendung einzuführen. Die Details sind wie folgt:...
Frage, ob erfahrene Menschen in KI und Entwicklungen in AI arbeiten. Ich arbeite seit zwei Jahren als KI -Ingenieur. Arbeitete an großartigen Projekten, aber alle verwendeten LLM -APIs oder eine...