问题标签 [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 投票
2 回答
2143 浏览

c# - Hangfire:该类型不包含带有签名的方法

我有一个 Web 应用程序,它具有 Page1.aspx,它执行 task1,然后以 fireAndforget 方式将 task2 排入调度程序。

我正在使用 Hangfire,一切都已安装并正常工作,但只有一次doLongJob()没有参数(测试时)。然后我添加了一个参数(我将添加更多)。之后我面临这些错误

Page1.aspx.cs

启动.cs

全球.asax.cs

0 投票
2 回答
1070 浏览

c# - 将 async-await 与即发即弃的方法混合使用

我正在使用 .NET 的HttpListener类编写一个 websocket 服务器。

本质上,我有一个HandleListener()等待客户端连接并将每个客户端生成到HandleClient(WebSocket client). 所以我目前有:

问题是,我似乎无法处理一个以上的客户。HandleListener()只要连接了第一个客户端,就好像执行暂停。

我尝试await从对 的调用中删除HandleClient(),但我收到“因为不等待此调用...”错误。我可以制作HandleClient()一个async void方法,但这不是一个事件处理程序。
顺便说一句,这HandleClient()async Task因为它在循环中一直在做,直到侦听器死了:

据我了解,一劳永逸的方法总体上是不好的,我似乎无法通过 async-await 实现来实现它。但这HandleClient() 一种即发即弃的方法,我看不到任何其他方法可以实现我所需要的。


编辑:添加了当前的实现HandleClient()

0 投票
1 回答
518 浏览

c# - 我是否需要从立即退出的控制台关闭与 WCF 服务的连接?

我有一个控制台应用程序,我想对 WCF 服务进行“即发即弃”调用,然后关闭而不等待响应。它只是应该启动清理工作。这项工作可能需要几个小时才能完成,因此我不希望控制台应用程序保持打开状态并等待它。

我已在合同中的方法中添加了“IsOneWay=true”,但控制台应用程序仍会等待任务完成,然后再执行 client.close() 并退出。

如果我删除了 client.Close(),那么控制台应用程序会按照我想要的方式工作,但我不确定即使控制台应用程序不再运行,通道是否会保持打开状态?

这是我的控制台应用程序代码:

这是操作合约代码:

0 投票
2 回答
1521 浏览

c# - 在 TransactionScope 中触发和忘记异步代码的最佳方法

我正在为 TransactionScope 对象的 using 块内做一些事情。在某些时候,我想通过触发并忘记来调用一些异步代码(我不想等待结果,而且我对该调用期间发生的事情不感兴趣)并且我希望该代码不属于交易(通过使用TransactionScopeOption.Suppress选项)。

所以最初我做了一些类似于methodFails我在下面的代码中评论过的东西。它给了我一个很好的"System.InvalidOperationException: 'TransactionScope nested wrong'"。我在 SO 中查找有类似问题的人,并找到了这个问题,其中 ZunTzu 的答案给了我method1使用TransactionScopeAsyncFlowOption.Enabled选项的想法,它按我的预期工作,methodFails但没有例外。

然后我想到了一个替代方案,method2即把异步代码放在第三种方法(method3)中,该方法由触发和忘记调用,而TransactionScopeOption.Suppress选项保留在非异步method2中。这种方法似乎和我的示例程序一样好用method1

所以我的问题是:哪种方法更好,method1或者method2,或者可能是我没想过的第三种方法?我倾向于method1因为这听起来像“制作 TransactionScope 类的人将 TransactionScopeAsyncFlowOption 放在那里是有原因的”。但是事实上这TransactionScopeAsyncFlowOption.Enabled不是 TransactionScope 的默认设置,这让我认为启用它可能会影响性能,而即发即弃可能是我可以保存该性能影响的一种特殊情况。

示例代码:

0 投票
1 回答
613 浏览

c# - c# 触发并忘记异步方法:在 .net 4 中实现 yield()

我正在尝试实现 fire and forget async 方法,以记录用于审计目的。

我正在关注这个例子Async throw-away fire-and-forget with C#.NET

但是我有使用.net framework 4.0的限制,我不能使用

我知道这是确保该方法异步执行的唯一方法,来自Microsoft

您可以使用 await Task.Yield(); 在异步方法中强制方法异步完成。

我的问题是:在.net 4.0 中这个实现的替代方案是什么?

0 投票
0 回答
35 浏览

.net - 使用 .net 4.5.2 和 angularjs 在后台下载文件

我需要下载一个包含大量数据的 excel 文件。因此,准备文件几乎需要一分钟多的时间,这会使 http 调用长时间保持打开状态。为了摆脱这个问题,我尝试了如下的“一劳永逸”方法 - 我正在使用后台生成文件

方法。但是,我在客户端收到了承诺响应(这是使用户能够继续其他任务所必需的,而不会被正在进行的文件下载中断),但是由于文件生成仍在后台进行,我' m 无法下载文件。

任何解决方案/不同的功能方法都将非常感激。

使用的技术 - .Net 4.5.2、Angular JS

0 投票
1 回答
3278 浏览

rest - Camel REST:长期运行的 HTTP 服务的异步请求处理

我试图找到此类问题的最新示例,但不幸的是没有找到。我正在尝试使用骆驼实现 Web 服务,其行为应如下所示:

  • Camel 通过 GET 或 POST (api/startsearch) 从 Rest-Endpoint 接收输入
  • 一个bean处理输入并生成一个ticket-id
  • 同一个 bean 使用 HTTP-202 或包含重定向 url (api/result?ticket-id=jf3298u23) 的重定向状态代码响应客户端。
  • bean 还将输入传递给 activemq 启动队列,Camel 路由将在其中完成所有长操作处理。
  • 路由完成后,结果应该在重定向 URL (/result?ticket-id=jf3298u23) 中可用。如果处理尚未完成,它应该使用自定义状态代码(如 HTTP-299-processing)进行响应。

所以我的路线是这样的:

bean 本身有三种方法:

我确信这不是使用手动设置的响应代码和消息进行回复的正确方法,但我没有找到另一种方法。

所以目前的问题是骆驼等待整个消息被处理,因此生成的响应.to("bean:requestHandler?method=processNewSearch")什么也不做,因为它只会被放入启动队列。

如何立即使用骆驼返回自定义响应并让路由异步处理请求?

0 投票
2 回答
3107 浏览

ansible - Ansible 异步任务收集结果:找不到工作

我正在尝试一劳永逸地完成一些任务并在此之后收集结果。这是我的剧本:

当我运行它时,我收到以下错误:

真的不知道为什么我收到这个“找不到工作”。我首先尝试在本地运行这个“收集”任务,然后我发现这个作业结果存储在 node2 上,所以我在那里运行它。尝试收集或不收集事实。也试过用

但这给了我与这里相同的错误。

任何帮助将非常感激!

PS。我正在运行 ansible 2.6.1

0 投票
4 回答
8792 浏览

c# - 在 C# 中调用 AWS Lambda 函数

我正在尝试从控制台应用程序运行 Lambda 函数。这个想法是让它快速运行并忘记 lambda 函数,而无需等待 lambda 函数返回。我的代码似乎根本没有执行 lambda 函数。我知道该功能有效,因为我可以运行测试。当我运行下面的代码时,我只是得到一个任务取消异常。

有人对我做错了什么有一些了解吗?

谢谢!

0 投票
2 回答
79 浏览

c# - 如何在异步环境中正确使用 Fire&Forget

考虑以下:

彩色:https ://ghostbin.com/paste/6edov

因为我作弊并使用廉价的 ConcurrentQueue 解决方案,所以我不太关心在 GetWebDataAsync() 期间发生的事情,我只想触发它并完成它的工作,同时我立即进入进程队列,因为它总是必须每 60 次完成一次秒或计时器分辨率。

我该如何正确地做到这一点,避免过多的开销或不必要的线程产生?

编辑:在其他地方得到了我的案例的答案