async jquery appel asynchrone contrôleur mvc
Comment puis-je obtenir mon jquery méthodes pour appeler mon contrôleur mvc et mon mvc contrôleur pour faire 2 choses en même temps?
Le code jquery est doint bien. Il se contente d'appeler les méthodes et continuer sur que je le veux.
$(document).ready(function () {
console.log("1");
getADsad();
console.log("2");
lala();
console.log("3");
});
function getADsad() {
$.ajax({
url: '/Configurator/Configure/Hello1',
type: 'POST',
dataType: 'json',
success: function (data) {
console.log(data + "hello1");
}
});
}
function lala() {
$.ajax({
url: '/Configurator/Configure/Hello2',
type: 'POST',
dataType: 'json',
success: function (data) {
console.log(data + "hello2");
}
});
Mon code C# de l'autre main n'est pas de faire deux choses à la fois:
[HttpPost]
public async Task<LoginViewModel> Hello1()
{
var str = await GetSlowstring();
return str;
}
[HttpPost]
public async Task<LoginViewModel> Hello2()
{
var str = await GetSlowstring();
return str;
}
public async Task<LoginViewModel> GetSlowstring()
{
await Task.Delay(10000);
LoginViewModel login = new LoginViewModel();
login.UserName = "HejsN";
return await Task.FromResult(login);
}
Le combiné d'appel devrait prendre juste un peu plus de 10 secondes si c'est fait correctement, mais maintenant il faut le double.
Dois-je créer un nouveau fil de discussion pour les appels? Ou est-ce fait automatiquement par le pool d'applications?
EDIT:
Comment vérifiez-vous que le côté serveur n'est pas faire des choses en parallèle? Est le temps entre vous initier premier appel à
Je ne suis pas sûr que je comprends ce que tu veux. Je peux le voir dans ma console j'ai chrome que les appels pour hello1 et hello2 est appelé le même temps. Mais je vois aussi qu'il diffère de 10 secondes à partir de quand ils reviennent. Vous pouvez les voir sur mon image, j'ai ajouté dans l'édition.
Oui, c'est exactement ce que je voulais savoir. D'habitude culprint dans ce scénario est de l'État de Session. Lire cet article: stefanprodan.com/2012/02/...
Merci @drax qui a aidé! Le sessionstate fait le truc 🙂
J'ai créé répondre avec un peu plus de détails, veuillez accepter, de sorte que cette question serait marqué comme réponse.
Hello1
et à la fin de Hello2
de plus de 20 secondes? MVC framework gère les threads pour vous automatiquement, à chaque demande, obtient son propre thread.Je ne suis pas sûr que je comprends ce que tu veux. Je peux le voir dans ma console j'ai chrome que les appels pour hello1 et hello2 est appelé le même temps. Mais je vois aussi qu'il diffère de 10 secondes à partir de quand ils reviennent. Vous pouvez les voir sur mon image, j'ai ajouté dans l'édition.
Oui, c'est exactement ce que je voulais savoir. D'habitude culprint dans ce scénario est de l'État de Session. Lire cet article: stefanprodan.com/2012/02/...
Merci @drax qui a aidé! Le sessionstate fait le truc 🙂
J'ai créé répondre avec un peu plus de détails, veuillez accepter, de sorte que cette question serait marqué comme réponse.
OriginalL'auteur Daniel Gustafsson | 2015-04-15
Vous devez vous connecter pour publier un commentaire.
Basé sur l'image de Chrome de la console, le problème est dans SessionState. Par défaut, lorsque l'application utilise SessionState, ASP cadre des processus de demandes de l'utilisateur unique en série (pour éviter les variables de session à partir de la corruption potentielle).
Pour les cas, lorsque vous souhaitez activer le traitement en parallèle des demandes d'utilisateur unique (et n'ont pas besoin de session de mise à jour), vous pouvez utiliser
SessionState
attribut sur le contrôleur.Plus de détails peuvent être trouvés par exemple dans ici: http://www.stefanprodan.com/2012/02/parallel-processing-of-concurrent-ajax-requests-in-asp-net-mvc/
Autant que je sache, vous avez à choisir entre la mise à jour de session et des requêtes parallèles. Vous devez utiliser une autre stockage de données (base de données, cookies, cache, ..) ou être conscient, que les demandes pour des actes que la session de mise à jour seront traitées en série.
OriginalL'auteur drax
Vous ne faites pas appel
await
dans votre méthodeGetSlowstring
, de manière synchrone, il bloque le thread avecThread.Sleep(10000);
. Pour des fins de test, vous pouvez essayer de remplacer cette ligne de code avecTask.Delay
méthode (voir Article MSDN pour cette méthode):il montre en même temps pour les deux demandes en Chrome sur mon côté. Voir l'image ci-dessus.
Aussi, comme mentionné dans le commentaire par drax, chaque demande sera son propre thread, de sorte que même les appels sans
async
-await
sera de retour dans les 10 secondes. Le bénéfice de l'aide, c'est que le thread n'est pas suspendu en attendant le long de l'appel à être complété.Mais comment puis-je obtenir des résultats différents :S Mes appels revient après 20 et 30 secondes, ce qui n'a pas de sens du tout :S
Ok, Drax commentaire sur l'article fait le tour 🙂 Mais merci quand même!:)
OriginalL'auteur Eadel
Comment sur la création de deux missions dans le contrôleur MVC?
Ensuite, il suffit d'utiliser un simple enum paramètre dans la requête afin de faire la distinction entre: les deux tâches, seulement task1, seulement la tâche 2.
OriginalL'auteur thomas