2016-08-10 6 views
1

Ich möchte Timeout-Mechanismus für Skripte, die durch Roslyn ausgeführt werden, implementieren, also brauche ich eine Möglichkeit, eine Skriptausführung abzubrechen. Die einzige Lösung, die ich bisher gefunden habe, besteht darin, das Skript innerhalb eines Threads auszuführen und zu beenden, aber es ist offensichtlich eine fehlerhafte Lösung.Abbrechen Roslyn Skriptausführung

Gibt es einen besseren Weg, dies zu tun?

+0

Können Sie erwarten, dass das Skript zusammenarbeitet? – svick

+0

In den meisten Fällen ja, aber Skripte werden auf dem Server ausgeführt, deshalb möchte ich eine Schutzmaßnahme gegen schlecht geschriebene Skripte. Ich möchte nicht, dass die Anwendung hängt, weil jemand versehentlich eine unendliche While-Schleife geschrieben hat. –

Antwort

3

Anders als Sie starten einen separaten Prozess und töten stattdessen (um die Standardfallen von Thread.Abort() zu vermeiden), das ist das Beste, was Sie tun können. Da der Skriptcode mehr oder weniger willkürlich sein kann, könnte es wirklich keine bessere Option geben. Alles, was Sie tun müssen, ist Ihr Skript Thread.Sleep(Timeout.Infinite) und es gibt nichts, was die Skript-Engine tun könnte, um das wiederherzustellen.