我想从一个字符串编译和执行代码。调用ExecuteCode()方法成功地工作并返回一个字符串值。但是,调用ExecuteEndlessCode()会挂起控制台应用程序。如何检测到CSharpScript.EvaluateAsync可能正在执行永久运行的代码?
public static string ExecuteEndlessCode()
{
var script = @"string Run() { while(true){} return ""1"";} Run()";
var result = CSharpScript.EvaluateAsync<string>(script, null).Result;
return result;
}
public static string ExecuteCode()
{
var script = @"string Run() { return ""1"";} Run()";
var result = CSharpScript.EvaluateAsync<string>(script, null).Result;
return result;
}发布于 2022-10-20 22:47:10
您可以为脚本设置一个超时,并在任务中执行脚本,如下所示:
var script = @" int Run() { while(true){} return 1;} Run();";
var task = CSharpScript.EvaluateAsync<string>(script, null)
if (await Task.WhenAny(task, Task.Delay(timeout) != task)
{ // handle timeout
}https://stackoverflow.com/questions/74146938
复制相似问题