Quelle est la différence entre ICollector<T>
Et IAsyncCollector<T>
Dans les fonctions Azure lors de l'écriture de fonctions C # (s'applique également aux WebJobs)?
Je comprends des exemples que ce sont des interfaces que je peux utiliser pour lier un paramètre de fonction à une liaison de sortie. Je comprends également que les deux interfaces ont des signatures de méthode non asynchrone et asynchrone en conséquence (c'est-à-dire ICollector<T>.Add(item)
et IAsyncCollector<T>.AddAsync(item)
). Mais que font-ils sous les couvertures? Publient-ils réellement des données dans la liaison de sortie, ou est-il tamponné en interne et vidé à la fin de l'exécution de la fonction (dans ce cas, pourquoi y aurait-il une méthode AddAsync
)?
ICollector<T>.Add(item)
effectuera toujours l'opération d'ajout sur le service sous-jacent immédiatement. Par exemple. l'implémentation de la liaison de file d'attente mettra les messages en file d'attente dès qu'ils sont ajoutés.
IAsyncCollector<T>.AddAsync(item)
le comportement varie d'une liaison à une autre, selon que le service sous-jacent prend en charge traitement par lots. Dans de tels cas, AddAsync
ne peut réellement enregistrer les éléments ajoutés que pour être vidés plus tard par le IAsyncCollector<T>.FlushAsync
méthode. Lorsqu'une fonction se termine avec succès, FlushAsync
sera appelé automatiquement. Vous pouvez autoriser le rinçage automatique à vider pour vous, ou vous pouvez choisir d'appeler FlushAsync
manuellement dans votre fonction selon vos besoins.
Le traitement par lots peut permettre à la liaison d'interagir avec le service sous-jacent de la manière la plus efficace possible. Par exemple. pour Azure Tables, plusieurs entités peuvent être mises à jour/persistantes en une seule opération par lots.