Je suis nouveau sur la technologie .Net et viens dans un problème. Currenlty J'essaie de construire une API de repos qui gère un traitement long avant d'envoyer le résultat au client. Ce que j'essaie d'atteindre est, je voudrais faire un traitement de fond après avoir reçu la demande du client. Mais je voudrais également envoyer une réponse au client. P>
En bref, ce serait quelque chose comme ça. P>
demande client -> gérée par contrôleur (faisant du traitement) -> Envoyer directement une réponse, ignorant l'arrière-plan qui marche toujours. P>
sur java, je peux le faire à l'aide d'un fil runnable. Comment puis-je atteindre cela sur API Web C #? P>
merci. p>
3 Réponses :
En bref, ne faites pas cela. p>
Le travail d'une API n'est pas d'effectuer des tâches de fonctionnement longues et lourdes. P>
Vous pouvez simplement laisser l'API recevoir la demande d'effectuer quelque chose, puis déléguer cela à un autre service. L'API peut alors envoyer une réponse de 200 à montrer qu'elle a reçu la demande et peut-être une URL à une autre ressource qui permet à un utilisateur de suivre les progrès. p>
L'API doit être disponible et réactif à tout moment. Il doit servir un certain nombre d'utilisateurs et si un certain nombre d'entre eux demandent quelque chose qui utilise beaucoup de ressources et qui prend beaucoup de temps, il est probable que l'API va simplement descendre et ne servira personne. p>
C'est pourquoi vous ne faites pas de telles choses dans une API. Laissez les autres services faire le levage lourd. P>
Votre API peut appeler une autre méthode async et retourner 200 / ok réponse sans attendre la demande de remplir.
Vous pouvez en savoir plus sur Async Programing en C # . P>
static async Task Main(string[] args) { Console.WriteLine("coffee is ready"); var toastTask = MakeToastWithButterAndJamAsync(2); async Task<Toast> MakeToastWithButterAndJamAsync(int number) { //Do something here. } }
Ceci peut être obtenu en utilisant une architecture couplée à lâche, en introduisant un bus de service ou une blob de stockage, une fois que vous avez reçu la demande dans Web API, vous pouvez le sauvegarder sur BLOB / Service Bus et renvoyer la réponse de réception de Web API. De Service Bus / Blob Stockage Utilisez WebJob / Fonction / application durable pour traiter le message à l'aide de l'événement. p>