问题标签 [background-thread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
80998 浏览

android - How to always run a service in the background?

I am in the process of creating an app that is similar to the built-in SMS app.

What I need:

  • a service that is always running in the background
  • every 5 min. the service checks the current location of the device and calls a web service
  • if certain criteria are met, the service should generate a notification (just like the SMS app)
  • when the notification is clicked, the user is taken to the app (just like the SMS app)
  • when the app is installed the service should be started
  • when the device is rebooted, the service should be started

What I have tried:
- running a regular service which worked just fine until Android kills the service
- using the AlarmManager to make the 5 min. interval call to a service. But I was not able to make this work.

0 投票
3 回答
12267 浏览

objective-c - iOS4 创建后台定时器

我(基本上)需要在 iOS 4 上创建一个后台计时器,它允许我在经过特定时间后执行一些代码。我已经读到您可以使用一些来完成此操作[NSThread detachNewThreadSelector: toTarget: withObject:];,但在实践中它是如何工作的?如何确保线程也保留在后台。本地通知对我不起作用,因为我需要执行代码,而不是通知用户。

帮助将不胜感激!

0 投票
1 回答
735 浏览

multithreading - 具有后台线程的 WCF NetTCP

背景:

我有一个在带有 NetTCP 绑定的 Windows 服务中托管 WCF 服务的系统。要将新服务添加到集合中,您只需在 <system.serviceModel -> services /> 中添加标准 WCF 配置条目,然后在自定义配置部分中添加一行,告诉宿主框架它需要初始化服务。每个服务都使用自己的后台线程和 AppDomain 实例进行初始化,以保持一切隔离。

以下是如何初始化服务的示例:

ServerManager 实例有一个 ServiceManager 的集合,每个 ServiceManager 与一个服务实例相关联,这是标准 WCF 实现所在的位置(ServiceHost.Open/Close 等)。ServiceManager 实例通过使用 BaseServerHost 基类(抽象)实例化(基于配置 - 它具有标准程序集/类型定义)服务的实例。每个服务都必须从这里继承,以便框架能够使用它。作为初始化过程的一部分,BaseServerHost 公开了几个事件,特别是拥有的 ServiceManager 附加到的 UnhandledException 事件。(这部分对于下面的问题至关重要。)

整个过程对我们来说非常有效(一个实例运行 63 个服务),因为我可以带一个对 WCF 一无所知的人,他们可以非常快速地创建服务。

问题:

我遇到的问题是后台线程。我们端点上的大多数公开方法在标准插入/更新/删除方法调用(例如向其他系统发送消息)之后执行大量活动。为了保持性能(前端是基于网络的),我们让初始的插入/更新/删除方法完成它的工作,然后启动一个后台线程来处理最终用户不需要等待的所有东西去完成。此选项非常有效,直到该后台线程中的某些内容未处理并导致整个 Windows 服务关闭,我理解这是设计使然(我可以接受)。

根据我的所有研究,我发现没有办法实现全局 try/catch(减去使用启用 1.1 处理后台崩溃的黑客配置),因此我的团队将不得不返回并在适当的地方获取这些. 除此之外,我发现 WCF 托管的端点端似乎在每次调用时都在其自己的线程中,并且让该线程与“父级”对话一直是一场噩梦。从服务的角度来看,这里是布局:

当我在业务层的后台线程上捕获异常时,我将其冒泡到 Endpoint 实例(继承自 BaseServerHost),然后尝试为该特定服务触发 BaseServerHost 的 UnhandledException 事件(由实例化的拥有的 ServiceManager 附加它)。不幸的是,事件处理程序不再存在,所以它什么都不做。我已经尝试了很多事情来让它发挥作用,到目前为止,我所有的努力都是徒劳的。

查看完整模型时(如下所示),我需要让业务层了解其父端点(这可行),并且端点需要了解正在运行的 BaseServerHost 实例,该实例需要了解托管它的 ServiceManager 所以在我们的标准日志记录程序中,可以将错误冒泡到此。

我尝试了静态类但没有运气,甚至将 ServerManager 设为静态并公开其先前的内部 ServiceManager 集合(因此它们可以被关闭),但该集合也始终为空或 null。

对制作这项工作的想法?

编辑:在进一步挖掘之后,我找到了一个关于我如何设想这个工作的例子。在标准的 ASP.NET 网站中,在任何页面/处理程序等上,您都可以使用 HttpContext.Current 属性来访问该请求的当前上下文。这正是我希望它与返回该服务的拥有 ServiceManager 的“ServiceManager.Current”一起使用的方式。也许这有帮助?

0 投票
1 回答
1421 浏览

ios - 在后台线程ios上调用函数-嵌套函数调用会发生什么

在我的主代码中(为了显示 UIActivityIndi​​catorView),我在后台线程上调用了一个函数 foo()。foo() 依次调用的函数会发生什么?这些函数也会在同一个后台线程中调用和执行吗?

0 投票
1 回答
638 浏览

iphone - (iphone) 在后台线程中不应该针对 UIView 做什么?

我知道并听说大多数与 UI 相关的不应该在主线程以外的线程中完成。
我也知道您可以更新 UIView 派生类的非视图相关数据成员(您添加的)。

我想知道以下操作是否可以在后台线程中执行。

  1. 分配 UIView
  2. 带/不带(CGRectZero 或仅初始化)框架信息的初始化 UIView
  3. 修改 UIView 的 frame/image(UIImageView's) 属性
  4. 修改 NSObject 派生类的图像属性。(将 UIImage 视为数据)
  5. 使用 subviews 方法访问子视图
  6. 等等。关于这个问题是否有明确定义的文档?

谢谢

0 投票
2 回答
414 浏览

asp.net - 删除后台线程上的图像时发生 ThreadAbortException。ASP.NET 4

我正在使用 VS2010 和 ASP.NET 4。我在应用程序中运行了一个长期运行的后台线程,旨在“清理”文件夹中最近最少使用的文件。它使用 EventWaitHandle 来消除不必要的 CPU 使用,但在应用程序的生命周期内保持运行。

在 24-40 次左右删除后,应用程序重新启动。这发生在 IIS Express 和 WebDev 服务器下,并附加了调试器。后台线程不会抛出异常,但所有线程都会发生 ThreadAbortException,并且应用会重新启动。不会在任何地方进行重定向调用。

这些文件位于根目录中的“imagecache”文件夹中,而不是任何会导致应用重新启动的文件夹中。没有创建或删除文件夹。

重新启动似乎发生在某个删除阈值发生后的一个定时间隔。

知道为什么会发生这种情况以及如何阻止它吗?每 10 秒重新启动一次对我来说是不可接受的:)

0 投票
1 回答
903 浏览

vb.net - 防止后台线程“超时已过期”。错误

我的页面上的 Click 事件中有以下代码部分:

这操作SendEmails发送 1000 封通讯电子邮件的方法。

但是,这似乎超时了,因为我已经能够记录以下错误:

超时已过。在操作完成之前超时时间已过或服务器没有响应。

如何增加超时量以允许有时间发送 1000 封电子邮件?

0 投票
3 回答
1919 浏览

asp.net - ASP.NET 后台线程

我正在开发一个包含 WCF 服务的 ASP.NET 应用程序,该服务旨在充当模拟生产环境的测试替身。它代表一个非常复杂的后端,可以通过它的 Web 服务接收订单,然后数小时或数天后发送通知(通过调用其他系统上的 Web 服务)。

这个测试双重应用程序的第一个版本的要求之一是它是无状态的,即没有数据库。

不再参与该项目的原始开发人员实施的设计是:

  1. 通过网络服务接收订单。
  2. 产生一个后台线程
  3. 向客户端返回预设响应
  4. 然后后台线程休眠 5 - 30 秒,发送通知,再次休眠,发送通知,可能重复三到四次,最后在无事可做时终止

线程休眠 5 - 30 秒旨在模拟生产系统的数小时和数天延迟。每个后台线程的生存时间不会超过三分钟。

目前,该设计似乎可以很好地实现其目的。到目前为止,这种方法遇到的唯一问题是,如果发生导致应用程序重新启动的事情(web.config 更改、部署的新 DLL、重新启动 IIS 等),后台线程似乎会被终止,并且任何挂起的通知后台线程永远不会发生。

客户现在决定 5 - 30 秒的延迟太短,通知之间延迟 5 分钟更合适。这意味着后台线程的生命周期可能超过 20 分钟。

我的直觉是,延迟五分钟可能不是这个设计的好主意。我很想看看人们对此有何看法。

随着延迟的增加,这种设计的可靠性如何?是否有人对 ASP.NET 中长时间运行的后台线程有任何经验可以对此发表评论?

0 投票
7 回答
14896 浏览

c# - 在后台线程中运行计时器

我正在寻找一种在后台线程中使用 System.Windows.Forms.Timer 的方法。我很难让它在后台线程中启动和停止。这就是我正在做的事情:

然后在 backgroundworker_dowork 方法中我有这个:

在 Tick 方法中,我有与计时器相关的代码,但由于某种原因它不会运行。如果我在 ui 线程中声明上述内容,它可以工作。有人可以帮我在后台线程中启动计时器吗?我不想使用 System.Timers 所以请不要建议

谢谢

0 投票
6 回答
31586 浏览

python - Django后台任务

我需要在 Django 中每隔几分钟填充一次 SQLite 数据库,但我想提供陈旧的数据,直到数据可用于更新数据库。(即我不想阻止要收集的数据;我唯一可以阻止的时间是数据库上是否有锁,在此期间我别无选择。)

我也不想安装单独的程序或库。

我将如何设置另一个可以调用save()一堆模型的线程,而不会遇到线程问题?