J'essaye d'invoquer une méthode f()
tous les temps t
, mais si l'invocation précédente de f()
n'est pas encore terminée, attendez jusqu'à ce que ce soit fini.Non-réentrant C# timer
J'ai lu un peu sur les minuteries disponibles, mais je n'ai trouvé aucun moyen de faire ce que je veux, sauf pour écrire manuellement tout. Toute aide sur la façon d'y parvenir sera appréciée, même si je crains de ne pas être en mesure de trouver une solution simple en utilisant des minuteurs.
Pour clarifier les choses, si t
est une seconde, et f()
exécute les durées arbitraires que j'ai écrit ci-dessous, puis:
Step Operation Time taken
1 wait 1s
2 f() 0.6s
3 wait 0.4s (because f already took 0.6 seconds)
4 f() 10s
5 wait 0s (we're late)
6 f() 0.3s
7 wait 0.7s (we can disregard the debt from step 4)
Notez que la nature de cette minuterie est que f()
aura pas besoin d'être en sécurité en ce qui concerne la rentrée, et un pool de threads de taille 1 est suffisant ici.
Le lien est mort. – astrowalker
@astrowalker merci! Supprimé pour l'instant, car ce n'est pas vraiment nécessaire ici. – Oak