c# - 异步编程和 Azure 函数

标签 c# azure azure-functions

在 Azure 函数“性能注意事项”部分中,Functions Best Practices ,在“使用异步代码但避免阻塞调用”下,异步编程是提高性能的建议做法。然而,最好的使用方法是什么?例如,在我的场景中,我有以下服务总线触发器:

public static void Run(
    [ServiceBusTrigger("topicname", "subname", AccessRights.Manage, 
    Connection = "TopicConnection")]string message, TraceWriter log)
{
    try {
        log.Info($"C# ServiceBus topic trigger function processed message: {message}");

        Task.Run(() => PushToDb(message, log));
    }
    catch(Exception ex)
    {
        log.Info($"Exception found {ex.Message}");
    }
}

在上面的代码中,我调用了PushToDb方法async。但是,由于它在后台运行,Function Runtime 会假设消息已成功消费并完成。如果 PushToDb 方法抛出异常怎么办?我如何确保运行时知道它尚未完成,而是应该被放弃?

希望尽可能多地使用async来提高性能。

最佳答案

您可以使函数异步:

public static async Task Run(
    [ServiceBusTrigger("topicname", "subname", AccessRights.Manage, Connection = "TopicConnection")]string message,
    TraceWriter log)
{
    try
    {
        log.Info($"C# ServiceBus topic trigger function processed message: {message}");
        await PushToDb(message, log);
    }
    catch(Exception ex)
    {
        log.Info($"Exception found {ex.Message}");
    }
}

Functions 运行时允许您使函数异步并返回任务。

在这种情况下,我们可以等待调用,这样我们就可以正常处理异常。

关于c# - 异步编程和 Azure 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339829/

相关文章:

c# - 将字节数组转换为对象 C++ | C++ 中的 C# 位转换器

c# - 以编程方式获取 Windows 体验指数值

c# - 我可以用 c# 解密在 php 中用 PASSWORD_BCRYPT 加密的密码吗?

c# - 我可以在具有动态IP的C#中创建套接字服务器吗?

ios - Azure 通知中心注册设备列表

python - 如何将输入变量从数据工厂传递到我的持久函数

azure - 如何使用 REST API 查找租户名称

azure - 从 Azure 数据工厂中的 SOAP API 加载数据的最佳方法是什么?

azure - 无法将对象添加到 Azure Function 的 settings.json

c# - Azure 持久实体,用于存储运行之间的函数应用程序状态 (.net 6)