我在 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
在 abort 调用后结束,以防止慢
计算完成?
提前致谢。
最佳答案
我发现 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;
}
我们可以吗?或者我错过了什么?
更新:
是的,它有效
关于c# - ajax.abort() 的 ASP.NET MVC 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29506694/