[英]ASP.NET MVC workaround for ajax.abort()
我在asp.net mvc上有一个休息端点:
[HttpGet]
public List<SomeEntity> Get(){
// Lets imagine that this operation lasts for 1 minute
var someSlowOperationResult = SomeWhere.GetDataSlow();
return someSlowOperationResult;
}
在前端我有一个下一个javascript:
var promise = $.get("/SomeEntities");
setTimeout(function(){promise.abort()}, 100);
如何在中止调用后强制Thread
死掉,以防止slow
计算?
提前致谢。
我发现Response
有isClientConnected
属性。 所以我们可以使用下一个方法:
[HttpGet]
public List<SomeEntity> Get(){
var gotResult = false;
var result = new List<SomeEntity>();
var tokenSource2 = new CancellationTokenSource();
CancellationToken ct = tokenSource2.Token;
Task.Factory.StartNew(() =>
{
// Do something with cancelation token to break current operation
result = SomeWhere.GetSomethingReallySlow();
gotResult = true;
}, ct);
while (!gotResult)
{
if (!Response.IsClientConnected)
{
tokenSource2.Cancel();
return result;
}
Thread.Sleep(100);
}
return result;
}
我们可以吗? 或者我想念什么?
UPDATE:
是的,它有效
后端不知道你已经调用了abort()
,如果已经发送了请求,那么服务器端逻辑将一直运行直到它完成。 为了阻止它运行,你必须向你的controller
发送另一个请求,通知控制器你已经中止了请求,控制器必须访问当前运行速度慢的实例,这个实例应该有一个强制计算取消的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.