[英]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.