Ne peut pas vous envelopper toute méthode non async dans un appel asynchrone à l'aide des délégués asynchrones? Ma référence est link.
Ok Alors avez-vous fait quelque chose de votre appel async comme ça ...
private delegate <returnType> YouTubeAPI(<args>)
private YouTubeAPI func;
private IAsyncResult ticket;
void YouTubeSearchFunc(string what)
{
func = <whatever the you tube call is>
ticket = func.BeginInvoke(<args needed>);
// WE MUST do this in order to return flow of control to program
return;
}
// later we need to check if the ticket is done and then get it
if (ticket.IsComplete == true)
// get it
else
// continue on like normal
La raison pour laquelle nous ne pouvons pas simplement obtenir immédiatement la valeur est parce que cela va bloquer le programme. C'est exactement ce que nous ne voulons pas faire. Donc, à la place, nous devons structurer le programme d'une manière que nous vérifions pour voir si c'est fait sur une mise à jour séparée. Cela permet à Win-forms ou à GTK de s'exécuter pour qu'il ne semble pas bloqué. MALHEUREUSEMENT, c'est une douleur dans la crosse. Ce que vous voulez probablement faire, c'est juste utiliser un travailleur d'arrière-plan. Lisez cette partie HERE et si cela ne vous aide pas plus parce que BackgroundWorkers peuvent avoir callbacks. Ensuite, tout ce que vous avez à faire est de mettre en place un travailleur d'arrière-plan, puis connectez votre fonction de mise à jour dans l'événement terminé.
Que voulez-vous dire par asynchrone? Asynchrone par rapport au client ou asynchrone par rapport au serveur? Ce sont deux choses complètement différentes. Autrement dit, essayez-vous de rendre l'application plus vive et plus épurée pour l'utilisateur ou essayez-vous de conserver les ressources du serveur? – Eilon