Schlagen Sie die Anfragen an und verarbeiten Sie nacheinander - C#C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Schlagen Sie die Anfragen an und verarbeiten Sie nacheinander - C#

Post by Anonymous »

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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post