使用 Azure Durable Functions 实现“即发即忘”后台作业

2024-02-29

我有一个用例,要求我启动一些 Azure Durable Functions,而不关心其结果,我想知道我的方法是否正确。

这是我所处的场景:

  • 功能A使用一个HttpTrigger
  • 功能B使用一个ActivityTrigger

这是我的工作流程:

  • A被调用,需要做一些业务逻辑
  • 除了这个业务逻辑之外,我还需要执行一项可能失败也可能不会失败的长时间后台任务。我不关心结果,但我需要每次都运行这个任务A被调用。
  • A需要尽快返回,这就是为什么我等不及后台任务完成
  • B处理这个后台任务,同时A returns

我在网上找到的所有耐用功能示例都显示如下:

await starter.StartNewAsync("BackgroundDurableFunction", data)

我的问题是我不想await持久功能,但我需要它在后台运行并执行其操作(主要是网络 I/O)。

为了避免等待这个持久功能,我最终采用了以下解决方法:

Task.Factory.StartNew(() => starter.StartNewAsync("BackgroundDurableFunction", data));

这似乎工作得很好,因为我不需要await任何事情,但读完之后Task.Factory.StartNew 的危险 https://sergeyteplyakov.github.io/Blog/async/2019/05/21/The-Dangers-of-Task.Factory.StartNew.html我有点害怕这可能是一个危险的解决方案。

所以,问题是:启动持久功能并让它在后台运行而不关心其结果(并且没有关于不等待任务的警告)的正确方法是什么?


是的,持久函数应该适合您的场景。你只是缺少一件事:协调器。这应该可以帮助您开始:

[FunctionName("MyHttpTriggered")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log,
[OrchestrationClient] DurableOrchestrationClient starter)
{
    string data = "hello";
    string instanceId = await starter.StartNewAsync("MyOrchestrator", data);
    return new OkObjectResult($"Orchestrator started. Instance ID={instanceId}");
}

[FunctionName("MyOrchestrator")]
public static async Task MyOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext context, ILogger log)
{
    string data = context.GetInput<string>();
    await context.CallActivityAsync("YourActivityFunction", data);
}

[FunctionName("YourActivityFunction")]
public static async Task YourActivityFunction([ActivityTrigger] string data, ILogger log)
{

    // do whatever here

}

虽然有await声明,这确实是一劳永逸。相反的是fan-in https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-cloud-backup#the-functions图案。在这种情况下,您基本上只进行扇出而不进行扇入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Azure Durable Functions 实现“即发即忘”后台作业 的相关文章

  • 双缓冲列表框

    我有一个 CheckedListBox WinForms 控件 它继承自 ListBox 谷歌搜索显示问题出在 ListBox 该控件锚定到其窗体的所有四个边 当调整表单大小时 列表框会出现难看的闪烁 我尝试继承 CheckedListBo
  • 代码块调试问题

    我正在尝试在代码块中运行一个简单的链表程序 但我无法运行该程序并且收到以下错误 Active debugger config GDB CDB debugger Default Building to ensure sources are u
  • 递归显式模板实例化以导出库的符号

    在我之前的问题中我问过递归显式模板实例化是否可能 https stackoverflow com questions 7395113 is recursive explicit template instantiation possible
  • 递归显式模板实例化可能吗?

    给定一个类似的模板 template
  • Web API 复杂参数属性均为 null

    我有一个 Web API 服务调用可以更新用户的首选项 不幸的是 当我从 jQuery ajax 调用中调用此 POST 方法时 请求参数对象的属性始终为 null 或默认值 而不是传入的值 如果我使用 REST 客户端调用相同的方法 我使
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • C# - 如何从 Steam 交易 API 获取图标的 URL(编码)

    以下是 API 为每个项目返回的 XML 部分
  • 带有 Prism 区域适配器的 AvalonDock

    我看到了一些关于 SO 的问题 但似乎没有一个适合我 我希望能够使用伟大的使用 Prism 4 但是 所有示例区域适配器均适用于 Avalondock 1 x 系列 我无法使其工作 有人有关于如何为 AvalonDock 的 LayoutD
  • 驱蚊程序?

    不 我认真的 最近 我读到 当电脑的压电蜂鸣器以一定频率振动时 声音可以驱赶蚊子 真的吗 如何以编程方式访问 PC 蜂鸣器 而不是扬声器 最好使用 C 我不知道有没有蚊子 但我的头疼得要命 啊啊 using System Runtime I
  • System.NotSupportedException:“集合是只读的。”从 iList 中删除对象时抛出

    运行下面的代码片段时抛出异常 我有一个 iListof webelements 如果该元素包含字符串 WSC 我想将其从 iList 中删除 谁能帮我吗 代码如下 IList
  • 将控制台输入和输出重定向到文本框

    您好 提前致谢 我正在尝试 非常努力 将控制台输入和输出重定向到文本框 到目前为止 输出工作正常 但问题在于输入 例如 我无法执行一个简单的程序来执行以下操作 Console WriteLine 请输入您的姓名 字符串名称 Console
  • 有没有办法对 RichTextBox 的撤消历史进行分组或暂时禁用它?

    我目前正在研究 WPF 中 RichTextBox 内的表格 在 WPF 中 表格没有行和列 只有行 每行都有一定数量的单元格 当用户按下 添加列 按钮时 我的程序会向每一行添加一个新单元格 使用此方法的问题是 在用户添加一列后 如果他们按
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • ASP.NET Core中间件如何进行DI?

    我正在尝试将依赖项注入到我的中间件构造函数中 如下所示 public class CreateCompanyMiddleware private readonly RequestDelegate next private readonly
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 如何在 OpenCV 中删除 mouseCallback

    在使用 C 的 OpenCV 中 有没有办法删除 mouseHandler int event int x int y int flags void param 通过函数添加到窗口 image window cv setMouseCallb
  • 隐式类型转换 - 编译器错误

    这个问题与this https stackoverflow com questions 3529449 can i make the ternary operator treat my class like a bool问题 下面的代码在V
  • Xamarin Forms:System.Reflection.TargetInitationException:调用目标已引发异常

    我正在为这个问题苦苦挣扎 我只是创建了一个简单的跨平台页面 这里是 XAML 代码
  • In 和 Out 属性在 .NET 中如何工作?

    我一直在尝试跨序列化数组AppDomain边界 使用以下代码 public int Read byte buffer int offset int count return base Read buffer offset count 作为猜
  • 如何获取打印机设备上下文?

    我在 Windows 上尝试使用以下命令打印增强型图元文件 EMF 播放增强元文件 http msdn microsoft com en us library dd162800 28VS 85 29 aspx 我当前正在使用屏幕上窗口的设备

随机推荐

  • 有没有更有效的方法来使用 angularjs 序列化表单?

    有没有办法序列化 angularjs 的函数 我的帖子现在看起来像这样 scope signup submit function var formData username scope username full name scope fu
  • 是否可以通过 GNU 并行并行 awk 写入多个文件?

    我正在运行一个 awk 脚本 我想通过 GNU 并行对其进行并行化 该脚本根据每一行上的值将一个输入文件多路分解为多个输出文件 代码如下 usr bin awk f BEGIN FS OFS t bc is the field that d
  • 使用基于关联数组的 UML 建模类型

    假设有一个 PHP 子系统 它仅使用关联数组来存储某种结构化数据 因此 实际上在语言级别上没有机制来约束这些结构 但您希望在设计中使用 UML 来定义它们 E g 在 PHP 中 联系人可能是这样的关联数组 name gt John Doe
  • C++:从模板参数生成字符串文字

    template lt unsigned int i gt struct t static const char s template lt unsigned int i gt const char t i s where 是 0 1 2
  • 将函数定义为 x,y 数据的插值

    我在 data txt 中有 2 列 x y 数据 如下所示 0 0 1 1 2 4 3 9 4 16 5 25 现在我想定义一个函数 f x 其中 x 是第一列 f x 是第二列 然后能够打印该函数的值 如下所示 f 2 这应该给我 4
  • 为什么 isnumeric 不起作用?

    我正在阅读一个非常简单的 python3 指南来使用字符串操作 然后我遇到了这个奇怪的错误 In 4 create string string Let s test this test to see if it is numeric str
  • 删除 C++ 向量中的重复条目

    只是想删除重复项 泳池是vector
  • 如何配置 Visual Studio Code 来解析 AWS Lambda 层的输入路径 (javascript)

    我使用 VS Code 开发 AWS 托管的无服务器应用程序 该应用程序使用 Lambda 最近 我决定开始使用 Lambda Layers 来提取和重用公共代码 我遇到的问题是 AWS Lambda 需要 Lambda 层的以下导入 co
  • PHP MySQL PDO TextArea 带条件检查的Where 子句

    我有一个页面 如下面的屏幕截图所示 这个想法是输入公共汽车号码和特定路线上的所有站点列表 每条线路一个 站点已存储在名为 stops 的数据库表中 我需要文本区域中每个站点的 ID 我当前的代码仅获取文本区域中最后一站的 ID 我觉得我失去
  • 在 MVC 5 中填充 DropDownList

    这是我的代码添加新产品视图模型 using AccessorizeForLess Data using System Collections Generic using System ComponentModel DataAnnotatio
  • numpy datetime64 添加或减去日期间隔

    我正在解析一个巨大的 ascii 文件 其中包含分配给条目的日期 因此 我发现自己使用 datetime 包与 numpy datetime64 并行来添加数组功能 我知道 pandas 包可能是最推荐用于约会的 但是尝试在没有 panda
  • 如何使用 golang 从 Amazon S3 存储桶的子文件夹中获取对象列表?

    如何使用 golang 从 Amazon S3 存储桶的子文件夹中获取对象列表 I tried svc s3 New session New aws Config Region aws String us east 1 params s3
  • 应用内恢复在 Debug 上运行良好,但在 iPhone sdk 中的 AdHoc 上崩溃

    当我单击 恢复 按钮 AdHoc 版本 时 我的应用程序崩溃了 但同一应用程序在调试模式下工作正常 我的代码 SKPaymentQueue defaultQueue restoreCompletedTransactions 崩溃报告 Nov
  • 从 Android 向 PLC 发送布尔值

    我能够与 PLC 建立连接以从中读取数据 现在有一个问题 那就是我必须编写一种方法来修改PLC中的数据 为了实现这一点 我必须向 PLC 发送两个值 一个 int 值和一个 boolean 值 我通过 net wimpi modbus 包中
  • Mp4 视频旋转元数据

    我开发了一个 android ios 视频共享应用程序 可以录制视频并将其上传到亚马逊 s3 为了兼容 android ios 以 mp4 格式录制 H264 AAC 编解码器 用户可以拍摄肖像或风景 应用程序从传感器获取信息 设置文件的旋
  • 无效的规格缓存文件

    我在 Windows 8 上安装了 ruby 2 0 0p247 x64 mingw32 和 Gem 2 2 2 我有一个持续存在的问题 gem 导致它几乎无法使用 每当我尝试安装新的 gem 时 我总是会得到 ERROR While ex
  • Python如何将数据帧的两列组合成一个列表?

    我有一个数据框 如下所示 df index data1 data2 0 20 120 1 30 456 2 40 34 如何将上面 df 中的两列组合成一个列表 使得第一行元素先出现 然后是第二行 我的预期输出 my list 20 120
  • Laravel 5.2:Flash 没有定义的提示路径

    我试图在安装 laracasts flash 1 3 包后创建一个视图 这是我的代码 include gazett errors 在blade php文件的 gazett errors 中找到以下代码 div class row div c
  • Visual C++ 函数突然变慢 170 毫秒(长 4 倍)

    在过去的几个月里 我一直致力于一个 Visual C 项目 从相机中获取图像并进行处理 到目前为止 更新数据大约需要 65 毫秒 但现在突然显着增加 发生的情况是 我启动程序 在前 30 次左右的迭代中 它按预期执行 然后循环时间突然从 6
  • 使用 Azure Durable Functions 实现“即发即忘”后台作业

    我有一个用例 要求我启动一些 Azure Durable Functions 而不关心其结果 我想知道我的方法是否正确 这是我所处的场景 功能A使用一个HttpTrigger 功能B使用一个ActivityTrigger 这是我的工作流程