如果我进行AJAX调用,如果用户按下"ESC"或离开该页面,是否会取消AJAX调用?
如果AJAX调用被取消,我的PHP脚本是否会继续运行,直到它完成它正在进行的操作(如果没有达到时间限制或任何其他服务器配置停止.),或者该进程会在同一时间被杀死它属于哪个Apache的孩子?
如果这个过程确实被Apache孩子杀死了,即使它没有完成,那么保持生命的最佳方法是什么,或者我应该考虑其他什么选择?(ZendX_Console_Process_Unix不是一个选项).
谢谢!
后来的发现:
如果我在Firefox中点击"ESC"(在firebug中检查),AJAX调用实际上会被取消.PHP进程继续,不受命中ESC或关闭选项卡的影响.
如何判断用户在从 Java servlet 下载过程中是否点击了取消?我用 IE 似乎会发生什么,输出流 println() 块。使用过的点击取消,但有没有办法让它超时或类似的东西?
我有一个类是"经理"类.其中一个功能是发出应该关闭该类的长时间运行过程的信号.它通过在类中设置一个名为"IsStopping"的布尔值来实现.
public class Foo
{
bool isStoping
void DoWork() {
while (!isStopping)
{
// do work...
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,DoWork()是一个巨大的功能,我决定重构它,并且作为该过程的一部分,将其中的一部分打破到其他类中.问题是,这些类中的一些还具有长时间运行的函数,需要检查isStopping是否为真.
public class Foo
{
bool isStoping
void DoWork() {
while (!isStopping)
{
MoreWork mw = new MoreWork()
mw.DoMoreWork() // possibly long running
// do work...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有什么选择?
我已经考虑通过引用传递isStopping,我不喜欢它,因为它需要有一个外部对象.我宁愿让额外的课程尽可能独立和免费.
我还考虑过使用isStopping属性,然后让它调用一个内部类可以订阅的事件,但这看起来过于复杂.
另一种选择是创建一个"进程取消令牌"类,类似于.net 4 Tasks使用的类,然后将该令牌传递给这些类.
你是怎么处理这种情况的?
编辑:
还要考虑MoreWork可能有一个实例化的EvenMoreWork对象,并在...上调用可能长时间运行的方法.我想我正在寻找的是一种方法,能够在调用树下发出任意数量的对象信号,告诉他们停止他们正在做的事情并清理和返回.
EDIT2:
感谢到目前为止的回复.似乎对使用的方法没有真正的共识,每个人都有不同的意见.看起来这应该是一种设计模式......
我尝试实现cancelToken API,以便每当我向服务器发出请求以获取每次击键的结果时,只有最后一个请求应该得到处理,但是我已经实现了axios取消令牌API,它似乎取消了每个请求,我在这里做错了什么?每次击键时都会调用此函数。
getProductLists2 = async () => {
let formData = new FormData()
const { start, limit } = this.state
formData.append('start', start)
formData.append('limit', limit)
formData.append('product_title', this.state.searchTitle)
formData.append('product_sku', this.state.searchSKU)
let cancel;
Axios({
method: 'POST',
url: BASE_URL + '/listProduct',
// headers: { 'Content-Type': 'multipart/form-data' },
data: formData,
cancelToken: new Axios.CancelToken(c => cancel = c)
})
.then(products => {
if (products && products.data.productList && products.data.productList.length > 0) {
this.setState({ productList: products.data.productList, totalProducts: products.data.productTotal })
}
})
.catch(err => toast.error('Something went wrong'))
console.log(cancel, 'h') …
Run Code Online (Sandbox Code Playgroud) request-cancelling cancellationtokensource reactjs cancellation-token axios
编辑:仅在 Firefox 中反应应用程序崩溃。当我使用 chrome 时,反应应用程序不会崩溃。如何处理 Firefox 中的崩溃问题?
我想在组件卸载时取消http请求。我使用 fetch() 和 AbortController。
我正在遵循本指南。
但是当组件卸载时,反应应用程序崩溃。
这是我的代码:
import React, { useEffect, useState } from 'react'
import AbortController from "abort-controller"
function Label(){
const abortController = new AbortController()
const signal = abortController.signal
const [labels, setLabels] = useState([])
useEffect(() => {
async function getLabels(){
const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/label`, {
credentials: 'include',
signal: signal
})
const res = await req.json()
setLabels(res.data)
}
getLabels()
// cancel httprequest if component unmounted
return function cancel(){
abortController.abort()
} …
Run Code Online (Sandbox Code Playgroud) 在处理取消时的线程中,您经常会看到这样的代码
while (!shutdown) {
.. do something, if a blocking call, then it will throw the interrupted exception
try { .. some more ... }
catch (InterruptedException e) {
shutdown = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,这是为什么,或者为什么这样做,比这更好
try {
while (true) {
.. do something, if a blocking call, then it will throw the interrupted exception
if (Thread.interrupted()) throw new InterruptedException();
}
} catch (InterruptedException e) {
.. clean up, let thread end
}
Run Code Online (Sandbox Code Playgroud)
我看到它的方式是,在后一种情况下,你根本不需要打扰关闭var.
是否可以使用重叠的I/O启动TCP连接请求,并在Windows中完成连接之前取消它?我需要至少支持Windows XP SP2.
我使用BackgroundWorker和C#进行了更长时间的多步骤过程.我需要确保每个步骤都已成功完成,然后再继续下一步.我已经看到许多引用让BackgroundWorker捕获错误并取消单击"取消"按钮,但我想自己检查错误然后优雅地结束该过程.我是否像点击取消按钮那样对待它,还是有另一种方式?
我有一个 .NET 核心依赖项,其范围仅限于每个 REST API 请求。它是Startup.ConfigureServices
通过调用添加的AddScoped
。
我想为此添加取消支持。如果我将 a 添加CancellationToken cancellationToken
到任何控制器操作的参数中,我可以获得一个在客户端请求被取消时被取消的令牌。然后我可以将该令牌传递给我的依赖项上的所有方法。
但是,依赖关系的范围仅限于请求,因此通过操作将令牌传递给方法感觉没有必要 - 我可以以CancellationToken
某种方式将其添加到范围依赖关系中吗?
c# dependency-injection request-cancelling .net-core asp.net-core
我叫obackgroundworker.CancelAsync(); 在一个后台工作者当前在另一个线程中做一些工作然后使用while(obackgroundworker.IsBusy == true)等待它在退出应用程序之前完成(如果用户在线程离开处理时改变主意并且我想要干净地关闭)
取消挂起的单位正确设置为true但线程没有退出,在工作线程中我有:
backgroundworker obackgroundworker = (backgroundworker)sender;
if (obackgroundworker.cancellationpending == true)
e.cancel = true;
Run Code Online (Sandbox Code Playgroud)
应检查取消是否待定,然后将取消的标志设置为true,我认为这也会导致线程实际终止...?或者,当检测到取消实际结束时,是否需要从线程调用其他函数?
我已经阅读了很多使用背景工作者的例子,并且没有报告任何问题.
资料来源:
http://www.albahari.com/threading/part3.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads. ASPX
谢谢