Bonjour à tous.
Je développe une application C# utilisant des objets COM/DCOM.
Les wrappers fonctionnent bien.
Malheureusement, si le serveur COM/DCOM est planté ou injoignable (cable débranché...), il arrive que les fonctions wrappées soient bloquées, et donc que ca bloque mon application.
Pour ne pas bloquer mon application, j'ai voulu exécuter ces fonctions dans des threads différents de mon application, en utilisant plusieurs méthodes possibles :
- Les threadpools
- des appels asynchrones en utilisant des delegate et du BeginInvoke
- Création de thread, abort, et join.
L'utilisation du threadpool ou des appels asynchrones ne sont pas concluants car je ne peux pas implementer de timeout (impossibilité de faire un join !!), et la j'aurais une fuite de thread
L'utilisation de thread aurait pu bien fonctionner, cependant je tombe sur un problème de handle non libéré par le GC (confirmé par google ), et au bout d'un long moment mon application est bloqué sur la methode start d'un thread, car à priori il n'y a plus de handle disponibles (les longs ponts de mai apportent leurs lots de bugs ).
Idealement, je voudrais pouvoir faire un join sur un BeginInvoke, mais ca semble pas être possible :'(
Vous auriez une idée ?
Merci
Partager