问题标签 [fire-and-forget]

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 投票
0 回答
60 浏览

c# - C# Fire and forget for WPF 应用程序日志,在回答前处理退出

我有一个应用程序应该在它退出到云功能时发送日志。这意味着如果我不走运(有时是几分钟!),可能需要很长时间才能得到答案。我不希望我的应用程序在后台停留那么久,所以我只想触发并忘记日志消息。我不需要 100% 的保证,但尽可能接近当然很好。

实现这一目标的最佳方法是什么?我已经阅读了这个问题的答案,但它是针对 ASP.Net 应用程序的。这是否仍然适用于退出和消失的 WPF 应用程序,可能在服务器给出答案之前,或者在这种情况下有更好的方法吗?

谢谢!

0 投票
1 回答
110 浏览

c# - 从 C# WPF 中的属性设置器异步自动保存

我们有 WPF 应用程序,一旦设置了属性,它就会自动将数据保存到数据库中。执行保存的调用是在异步方法中。

我不需要等待电话。除非发生异常,否则基本上就是一劳永逸。

我们正在使用事件处理这个问题,从属性设置器中调用事件。通过这种方式,我们可以拥有 async void 事件处理程序,然后在保存例程中一直处于 async/await 状态。异常处理在这种模式下运行良好。

我们真的需要这些事件吗?像这样直接调用 async void 方法有什么后果?特别是与异常处理有关的情况下,是否会捕获异常?

0 投票
2 回答
85 浏览

c# - 是否应该等待指标调用?不等待他们安全吗?

在我的后端 Web 服务中,指标会在多个时刻发送以跟踪其行为。为了发送一个指标,我做了一个 http 调用。我担心等待它会给服务的响应增加无用的延迟。对我来说,似乎他们应该火了就忘记了。不等待这些电话是否安全和/或建议?

注意:我的服务是 c#,dotnet core。

PS:调用失败可以由度量包本身记录。指标调用失败不应中断用户调用。

0 投票
1 回答
179 浏览

python - 如何在后台线程或进程中有效地使用 PyJulia 或其他非线程安全库?

我在我的 Python 应用程序中有一个场景,我有一些工作需要在后台完成,但是以一种即发即弃的方式。我试图满足两个限制条件:

  • 后台任务使用 PyJulia,它不是线程安全的,如果从同一个进程中的两个不同线程调用它会失败,即使这些调用不会同时发生。
  • 事实证明,在给定进程中第一次调用 PyJulia 时,它还有一些繁重的工作要做。在执行 Julia 代码之前需要几秒钟的时间进行初始化。我不想每次打电话都支付这笔费用。

处理这种情况的最简单方法是什么?我想我必须创建一个长寿命的工作线程或进程,我可以不断地将任务排队到其中,但如果我不需要,我不想编写自定义代码来处理所有这些。

0 投票
2 回答
5721 浏览

c# - 触发并忘记发送非必要指标的异步方法的最佳实践

等待发送非必要指标对我来说毫无意义,因为它会在每次调用后端 dotnet 核心服务时增加延迟(等待服务器的响应),每次客户端调用可能会发生多次。尽管如此,在失败时记录错误仍然很重要(尽管我不需要抛出它,因为度量标准的失败不应该影响服务)。

我发现了多种方法。以下是以 FireAndForget 方式调用的方法:

方法一:去掉await。

方法 2:对我来说似乎类似于方法 1,因为我们不等待 Task.Factory.StartNew 调用。

方法 3:作为工作项在 ThreadPool 上排队。

我很难找到应该将哪个用于 Fire 而忘记发送非必要指标的调用。我的目标是在每次发送指标时不增加对我的服务的每次调用的延迟。当度量标准发送失败时记录错误很重要,但它永远不应该重新抛出。线程上下文对于任务的执行并不重要。任务应该总是,或者至少几乎总是,被完成。

哪一个是满足需求的最佳实践?还是它们都一样?

注意:我没有包括async void,因为它看起来有风险(如果发生异常,它可能会崩溃,因为没有任务会包装它)。

0 投票
1 回答
683 浏览

asp.net-core - 如何按需启动 ASP.NET Core BackgroundService?

我希望能够在 ASP.NET Core 2.2 中启动即发即弃的工作。我尝试了以下方法:

但是,这会自动启动,我希望能够按需启动它,类似于 Hangfire 允许的方式:

这也允许作业自然地使用 ASP.NET CORE DI。

问题:如何按需启动 ASP.NET Core BackgroundService?


###背景信息

我正在处理一个需要即发即弃各种方法的应用程序。已经写好的代码是这样的:

这意味着每个方法都必须明确地处理获取范围和检索非常丑陋的依赖关系。

0 投票
2 回答
163 浏览

python-3.x - 错误:root:xyz中的错误线程'Thread-7'中没有当前事件循环

我正在尝试实现 fire_and_forget 功能,这是详细信息。

我正在尝试使用的异步装饰器:

我的异步调用使用上面的装饰器:

我的 Flask 应用程序调用 test_xyz 反过来触发上述火灾并忘记 call_async:

我无法理解在哪里正确设置我的事件循环,因此我不会收到错误消息:“xyz 中的错误线程'Thread-7'中没有当前事件循环”并且我的事件被正确触发。

0 投票
1 回答
870 浏览

python - Asyncio 在单独的线程中“触发并忘记”任务

我有一个长时间运行的同步 Python 程序,我想每秒运行约 10 个“即发即弃”的任务。这些任务命中远程 API,不需要返回任何值。我试过这个答案,但它需要太多的 CPU/内存来生成和维护所有单独的线程,所以我一直在研究 asyncio。

这个答案很好地解释了如何使用 asyncio 运行“一劳永逸”。但是,它需要 using run_until_complete(),它会等待所有异步任务完成。我的程序正在使用同步 Python,所以这对我不起作用。理想情况下,代码应该像这样简单,log_remote不会阻塞循环:

我在 Python 3.7 上。如何在另一个线程上使用 asyncio 轻松运行它?

0 投票
1 回答
578 浏览

c# - .NET Core 中的等待和即发即弃

我正在开发 Blazor 应用程序。
当用户填写表单时,需要将数据保存到表格中,并且需要运行更长的任务。
用户不需要等待这个更长的任务完成。稍后会通知他。
但是当长任务完成时,需要更新表条目。
这个怎么做?

这是我当前的代码,它阻止用户直到所有完成:

0 投票
2 回答
75 浏览

asp.net - 按钮单击 ASP.NET 后无需等待操作完成即可发送电子邮件

简而言之,保留在 HTTP 上下文中,我希望用户在单击订单完成按钮后,不要等待邮件发送完毕,然后再发送回“thak you page”。

我看到 HostingEnvironment.QueueBackgroundWorkItem 可以帮助我解决这个问题,但总是存在被 IIS 回收杀死的风险。

这样做的最佳解决方案是什么?

我知道最好的办法是开发一个单独的控制台解决方案,但对于 3/4 的电子邮件来说这不值得,或者我可以考虑通过使它们异步来加速它?