essayez ceci:
public void main()
{
executeFn("1");
executeFn("2");
}
List<string> QueuedCalls = new List<string>(); // contains the queued items
bool isRunning = false; // indicates if there is an async operation running
private bool executeFn(string someval)
{
if(isRunning) { QueuedCalls.Add(someval); return; } // if there is an operation running, queue the call
else { isRunning = true; } // if there is not an operation running, then update the isRunning property and run the code
runSomeAsyncCode(); //undefined async operation here<-
isRunning = false; //get here when the async is completed, (updates the app telling it this operation is done)
if(QueuedCalls.Count != 0)//check if there is anything in the queue
{
//there is something in the queue, so remove it from the queue and execute it.
string val = QueuedCalls[0];
QueuedCalls.RemoveAt(0);
executeFn(val);
}
}
cette façon ne bloquer les fils, et sera tout simplement exécuter l'appel mis en attente lorsque les premiers finnishs, qui est ce que je crois que vous voulez! codage heureux! Maintenant, je recommande d'exécuter la dernière section, à l'endroit où elle définit l'isRunning à false, à l'intérieur de votre opération asynchrone, ou le déclencher avec un événement ou quelque chose, le seul attrapé est que le code doit être exécuté lorsque votre opération asynchrone est terminée. donc vous voulez faire cela à vous de décider
Est-ce que vous écrivez les méthodes runSomeAsyncCode, ou proviennent-elles d'un tiers? –
"2 fonctions qui doivent être exécutées l'une après l'autre" - n'est-ce pas une simple exécution séquentielle? –
Le code à l'intérieur de executeFn est thread, donc j'ai besoin de mettre les appels dans une file d'attente pour qu'ils deviennent séquentiels. – GatesReign