如何启动任务并定义超时以完成它

时间:2018-05-11 11:34:11

标签: c# .net timeout task task-parallel-library

我们有一个项目,我们并行运行一些任务。我们正在启动任务来执行此操作。每个任务在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();
        }
    });

0 个答案:

没有答案