Je suis novice en programmation asynchrone. J'ai une DLL C# avec une méthode asynchrone qui est appelée, prend un pointeur de fonction (délégué) et appelle cette fonction de rappel après que "résultat" soit calculé.rappel asynchrone
public delegate void CreatedDelegate(Foo result);
public void CreateAsync(CreatedDelegate createdCallback)
{
Task t = Task.Factory.StartNew(() =>
{
Foo result = ...
createdCallback(result);
});
}
Le rappel de délégué de type « CreatedDelegate » est (dans mon cas) un pointeur de fonction à un procédé de C++/CLI qui fonctionne avec le résultat. Donc, ce concept asynchrone semble assez bien fonctionner dans la plupart des cas, mais parfois je rencontre quelques erreurs. Comment puis-je y arriver si la fonction "CreateAsync" est appelée plusieurs fois avec des efforts de calcul différents, que les appels résultants à "CreatedCallback" se produisent dans le même ordre que l'original "CreateAsync" a été appelé? Pour le rendre plus clair: Le premier appel à "CreateAsync" devrait aboutir au premier appel à "CreatedCallback" même si un appel suivant de "CreateAsync" est plus rapide et appelait le callback plus tôt.
Peut-être que cela peut être fait en autorisant un seul nouveau thread actif dans le "CreateAsync" asynchrone à la fois?
Ce n'est pas, comment fonctionne filetage à partir de plus d'un et les ayant complète hors de manière imprévisible est de par sa conception. Utilisez un modèle producteur/consommateur si c'est un problème. –