c# - ajax.abort() 的 ASP.NET MVC 解决方法

标签 c# asp.net ajax asp.net-mvc

我在 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 调用后结束,以防止 计算完成?

提前致谢。

最佳答案

我发现 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;
}

我们可以吗?或者我错过了什么?

更新:

是的,它有效

关于c# - ajax.abort() 的 ASP.NET MVC 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29506694/

相关文章:

c# - JavaScript window.open 有时返回 null

c# - 如何将大图像从 wp7 发送到 wcf?

c# - 使用 linq 选择字典列表

asp.net - 单元/集成测试,它们应该有多细粒度?

java - Ajax 请求时出现错误 415(Ajax、Spring)

c# - 如何应用 TDD/BDD 方法从 C# 使用 Oracle 数据库中的数据创建 Excel 文件

c# - 使用 JavaScript 将参数传递给服务器方法

c# - 使用 Javascript 过滤 GridView

javascript - 单个页面中的两个 xmlHttpRequests

php - 如何获取站点上加载了 javascript/ajax 的 div 的内容?