我发出 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 => 让方法运行只要它需要。我可以做其他事情