WebView
의 Skulpt를 사용하여 Python 스크립트를 실행하려고합니다. 파이썬 스크립트 무한 루프가 포함되어 있으면 응용 프로그램이 응답을 제공합니다. 자바 스크립트에서 C#잠시 후 AsyncOperation을 취소하십시오.
await webView.InvokeScriptAsync("evalPy", new string[1] { script });
에서 파이썬 스크립트를 실행
는 :
function evalPy(script) {
try {
var result = Sk.importMainWithBody("<stdin>", false, script);
return Sk.builtins.repr(result).v;
} catch (err) {
}
}
InvokeScriptAsync
는 async
작업입니다 언제든지 취소 할 수있는 방법이있을 수 있습니다.
잠시 후 자바 스크립트를 중지하는 내 첫 번째 시도를 :
var task = webView.InvokeScriptAsync("evalPy", new string[1] { script }).AsTask<string>();
task.Wait(2000);
task.AsAsyncOperation<string>().Cancel();
두 번째 시도 :
var op = webView.InvokeScriptAsync("evalPy", new string[1] { script });
new Task(async() =>
{
await Task.Delay(2000);
op.Cancel();
op.Close();
}).Start();
는 또한 자바 스크립트에
function evalPy(script) {
try {
var result = Sk.importMainWithBody("<stdin>", false, script);
setTimeout(function() { throw "Times-out"; }, 2000);
return Sk.builtins.repr(result).v;
} catch (err) {
}
}
CodeSkulptor.org도 Skulpt를 사용하는을의 setTimeout 시도 웹 브라우저에서 Python 스크립트를 실행하고 P의 실행을 중지합니다. 몇 시간 후 ython 스크립트.
당신은'await', 방법은 늘 실행 때까지 자바 스크립트로 돌아 가면 완료되었습니다. 따라서 무한 루프가 결코 반환되지 않습니다. 2 초를 기다렸다가 취소하면 어떻게됩니까? –
2 초 동안 기다렸다가 취소하면 무한 루프가 계속됩니다. 디버거가 작업 상태를 취소로 표시하지만 응용 프로그램이 응답하지 않음 –
파이썬 프로세스가 계속 실행되지만 메서드 호출이 반환됩니다. 메소드 호출에서 다른 일을하고 있습니까? –