J'ai une fonction que je veux autoriser à fonctionner pendant une période de temps donnée et ensuite, si elle ne l'a pas quittée, abandonner. Quelle est la meilleure façon de le faire?"Watch Dog" ou système de bac à sable en C#
Le meilleur que je l'ai pensé serait courir dans un autre thread, attendez avec un délai d'attente pour elle de mourir, puis utiliser Thread.Abort()
pour le tuer (cela pourrait ne pas fonctionner si la fonction a le mauvais type de catch
bloc). Une autre option (une que je ne sais pas comment faire du travail) serait une sorte de minuterie préemptive avec un lancer.
Y a-t-il un meilleur moyen? Une sorte de système de bac à sable facile?
Edit: la fonction que je vais être en cours d'exécution n'a pas de système pour vérifier si elle doit annuler et je ne peux pas (comme il ne faut pas ) ajouter. En outre, ceci est un harnais de test de sorte que la condition dans laquelle je vais tuer la fonction est qu'elle a coulé. Dans ce cas, je ne peux pas compter sur le fait de faire quoi que ce soit correctement.
Existe-t-il un moyen d'obtenir les valeurs de retour de fonction et le rappel pour fonctionner à travers une limite 'AppDomain'? – BCS
Chargement du code dans un AppDomain est une bonne idée si vous ne pouvez pas utiliser un BackgroundWorker, mieux que Thread.Abort() –
Il y a un très bon article avec du code wrapper pour appeler des méthodes arbitraires dans un autre AppDomain via un délégué: http: //blogs.geekdojo.net/richard/archive/2003/12/10/428.aspx. Cela a bien fonctionné pour moi pour récupérer les résultats de l'appel de méthode, mais pour une raison quelconque, je ne pouvais pas passer d'arguments au délégué sans qu'il se bloque. Peut-être que vous aurez plus de chance. –