我们有一个项目,我们并行运行一些任务。我们正在启动任务来执行此操作。每个任务在CodeDom
内运行一个代码(由客户编写以定制部分流程)。它工作正常。
我想知道如何限制执行任务的时间。我害怕用户编写错误的代码,导致无限循环或错误的代码,这需要花费大量的时间来执行。我想给他10秒钟来执行它的代码,之后,杀死在Task上运行的线程并完成Task。
对于样本(伪代码):
Task[] tasks = GetListOfTasks();
foreach (var task in tasks)
{
task.Start();
}
我试着这样做:
Task.WaitAll(tasks, TimeSpan.FromSeconds(10));
我已经在所有这些任务上都有取消令牌,但用户无法使用它。
如果在指定的TimeSpan
上没有完成任务,如何停止执行任务并终止任务?
谢谢。
var threadTask = Task.Run(() =>
{
// start thread
thread.Start();
// force to wait the thread
thread.Join();
});
// run a new task to wait the task/thread to finish in a timeout.
// on the continueWith, abort the thread.
Task.Run(() => Task.WaitAll(new[] { threadTask }, TimeSpan.FromSeconds(10)))
.ContinueWith(t =>
{
if (thread.IsAlive)
{
thread.Abort();
}
});