在 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/