У нас есть проект, в котором мы выполняем несколько задач параллельно.Мы начинаем Задачи, чтобы сделать это.Каждая задача запускает код внутри CodeDom
(написанный клиентом для настройки части процесса).Это прекрасно работает.
Я хотел бы знать, как ограничить время выполнения задачи.Я боюсь, что пользователь напишет плохой код, и это приведет к чему-то вроде бесконечного цикла или плохому коду, выполнение которого занимает много времени.Я хотел бы дать ему 10 секунд, чтобы выполнить его код, и после этого убить поток, выполняющийся на Задаче, и завершить Задачу.
Для примера (псевдокод):
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();
}
});