超时期无法取消任务



在我的MVC网站项目中,我需要取消调用代码,如果它通过超时,我写了以下代码,它在不超时时正确返回了预期的结果,但是当超时时,代码返回到主线程,但孩子任务仍在运行(我检查了任务管理器并查看IIS Worker线程使用大量硬件),我不知道它是什么问题。

    private static object GetCandidateOutput(MethodInfo mi, object o, string[][] input)
    {
        var cancellationToken = new CancellationTokenSource();
        var task = Task.Run(() => mi.Invoke(o, input), cancellationToken.Token);
        if (task.Wait(TimeSpan.FromSeconds(3)))
        {
            return task.Result;
        }
        else
        {
            cancellationToken.Cancel();
            throw new Exception("Timed out");
        }
    }

我弄清楚了,以下是工作代码:

var cts = new CancellationTokenSource();
var newTask = Task.Factory.StartNew(state =>
{
    var token = (CancellationToken)state;
    if (!token.IsCancellationRequested)
    {
        var invokeInput = new object[] { input };
        var output = mi.Invoke(o, invokeInput);
    }
}, cts.Token, cts.Token);

if (!newTask.Wait(timeout, cts.Token))
{
    cts.Cancel();
    throw new Exception("The operation has timed out.");
}

相关内容

  • 没有找到相关文章

最新更新