1

我发出 ajax 请求来调用控制器操作,如下所示:

控制器:

    [AsyncTimeout(8000, Order = 3)]
    [HandleError(ExceptionType = typeof(TimeoutException), Order = 4, View = "TimeoutError")]
    public async Task<JsonResult> RemovePackageAsync(CancellationToken cancellationToken, string packageId, ICollection<int> ids)
    {
        PackageRemoveItem removeItem = new PackageRemoveItem()

        .............blah blah blah

        await this.deviceRepository.RemovePackageAsync(removeItem);
        return  this.Json(JsonConvert.SerializeObject(removeItem.Machines));
    }

方法:

    public async Task RemovePackageAsync(PackageRemoveItem removeItem, CancellationToken cancelToken = default(CancellationToken))
    {
        await Task.Run(() =>
        {
            int[] machines = removeItem.Machines.Keys.ToArray();
            .......


        });
    }

但是,当我在调试中运行它时,我的 ajax 响应会等到我的“RemovePackageAsync”完成。我在这里想要实现的是让这个方法在不同的线程上调用,让它执行而不是等待它完成,而是立即从控制器获得“真实”响应。

ajax 调用 => 控制器 => 在新线程上调用方法,不要等待它完成但返回 true => 让方法运行只要它需要。我可以做其他事情

4

1 回答 1

3

异步控制器仅Web 服务器内部异步工作,以从线程池中释放线程以处理并发请求。浏览器仍会同步等待您的操作返回结果。

你需要的是一个标准的控制器动作,它只是产生一个线程或任务并立即返回。

但是这样你就不能返回任何结果数据。

于 2012-11-09T11:17:44.753 回答