Existe-t-il une méthode simple et agréable pour retarder l'appel d'une fonction tout en laissant le fil d'exécution se poursuivre ?
par exemple
public void foo()
{
// Do stuff!
// Delayed call to bar() after x number of ms
// Do more Stuff
}
public void bar()
{
// Only execute once foo has finished
}
Je sais que cela peut être réalisé en utilisant un timer et des gestionnaires d'événements, mais je me demandais s'il existait un moyen standard en c# pour y parvenir.
Si quelqu'un est curieux, la raison pour laquelle cela est nécessaire est que foo() et bar() sont dans des classes différentes (singleton) qui peuvent avoir besoin de s'appeler l'une l'autre dans des circonstances exceptionnelles. Le problème est que cela se fait lors de l'initialisation, donc foo doit appeler bar qui a besoin d'une instance de la classe foo qui est en train d'être créée... d'où l'appel retardé à bar() pour s'assurer que foo est complètement instancié... En relisant cela, on a presque l'impression d'une mauvaise conception !
EDIT
Je prends en compte les remarques sur la mauvaise conception ! Je pense depuis longtemps que je pourrais améliorer le système, mais cette situation désagréable seulement se produit lorsqu'une exception est levée, à tout autre moment les deux singletons coexistent très bien. Je pense que je ne vais pas m'amuser avec de méchants modèles asynchrones, je vais plutôt remanier l'initialisation d'une des classes.