簡體   English   中英

ajax.abort()的ASP.NET MVC解決方法

[英]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計算?

提前致謝。

我發現ResponseisClientConnected屬性。 所以我們可以使用下一個方法:

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM