Utiliser ExecuteAsync pour exécuter des messages en mode asynchrone

À l’exception de quelques opérations décrites ci-dessous, toutes les opérations de données qui utilisent les classes de demande d’assemblys du Kit de développement logiciel (SDK) sont synchrones.

L’importation d’une solution est une opération qui peut nécessiter des ressources considérables, il existe une option permettant d’effectuer cette opération en mode asynchrone à l’aide de la classe de demande ExecuteAsyncRequest. La classe de demande DeleteAndPromoteRequest effectue des opérations similaires gourmandes en ressources.

L’importation d’une solution en mode asynchrone améliore les performances du système en différant l’exécution du message à une date ultérieure où la charge du serveur est réduite. Les utilisateurs interactifs n’ont pas besoin d’attendre l’exécution du message cible pour continuer. Cela est particulièrement utile lorsque vous importez des solutions qui mettent du temps à s’exécuter.

La fusion de lignes avec un grand nombre d’activités associées ou d’autres types de tables peut également prendre beaucoup de temps pour mettre à jour toutes les lignes associées. Par conséquent, leur exécution en arrière-plan peut améliorer l’expérience utilisateur.

Notes

ImportSolutionRequest, DeleteAndPromoteRequest et MergeRequest sont les seules classes de demande qui peuvent être utilisées avec ExecuteAsyncRequest.

Utilisez la classe de demande ExecuteAsyncRequest pour exécuter un message de façon asynchrone. Vous configurez la demande et transmettez l’instance de la demande en tant qu’argument à IOrganizationService.Execute. ExecuteAsyncResponse est retourné avec l’ID de la tâche asynchrone. Vous pouvez éventuellement rechercher la tâche à l’aide de l’ID pour déterminer son état actuel.

Vous pouvez utiliser la classe de requête ExecuteMultipleRequest pour mettre en file d’attente plusieurs solutions à importer de manière asynchrone. Pour cela, ajoutez un ou plusieurs demandes de message ExecuteAsync à une demande de message ExecuteMultiple. En raison des restrictions de limitation qui améliorent les performances globales du système, un seul message qui s’exécute de façon asynchrone est autorisé à s’exécuter à la fois pour chaque organisation.

Pour plus d’informations sur le message ExecuteMultiple, voir Exécuter plusieurs requêtes à l’aide du SDK pour .NET.

Exemple

L’exemple suivant montre comment utiliser la classe de requête de message ExecuteAsyncRequest avec la classe de requête de message ImportSolutionRequest.

string ManagedSolutionLocation = @"C:\temp\ManagedSolutionForImportExample.zip";

byte[] fileBytes = File.ReadAllBytes(ManagedSolutionLocation);

ImportSolutionRequest impSolReq = new ImportSolutionRequest()
{
CustomizationFile = fileBytes
};

ExecuteAsyncRequest asyncReq = new ExecuteAsyncRequest()
{
Request = impSolReq
};

var asyncResp = (ExecuteAsyncResponse)svc.Execute(asyncReq);

Guid asyncOperationId = asyncResp.AsyncJobId;

Vous pouvez ensuite interroger l’entité AsyncOperation à l’aide de la valeur asyncOperationId de la tâche système avec le paramètre AsyncOperationId correspondant pour détecter quand la valeur StatusCode indique si l’opération a réussi (30), échoué (31) ou a été annulée (32).

Voir aussi

Utiliser les messages avec le SDK pour .NET
Utiliser ExecuteTransaction
Exécuter plusieurs requêtes à l’aide du SDK pour .NET

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).