在Azure功能性能注意事项部分中,https://docs.microsoft.com/en-us/azure/azure-functions/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方法异步,但由于它在后台运行,因此Function运行时假定消息已成功使用并完成它。如果PushToDb方法抛出异常怎么办?如何确保运行时知道它不完整,而应该放弃。
希望尽可能多地使用异步来提高性能。
答案 0 :(得分:35)
您可以将函数设为异步:
#!/bin/bash
echo $#
if [ $# -ne 1 ]
then
echo "Usage: ${0} {imagefilename}"
elif [ -f "$1" ]
then
T="255"
sigma=5
convert ${1} ${1}.I.mpc
convert ${1}.I.mpc -blur 0x$sigma ${1}.G.mpc
convert ${1}.I.mpc ${1}.G.mpc +swap -compose minus -composite ${1}.G.mpc +swap -compose divide -composite ${1}.D.mpc
M=`convert ${1}.D.mpc ${1}.D.mpc -compose multiply -composite -evaluate pow 0.5 -evaluate multiply $T -format "%[fx:maxima]" info:`
M2=`convert xc: -format "%[fx:2*$M]" info:`
convert ${1}.D.mpc -evaluate add $M -evaluate divide $M2 -evaluate multiply $T ${1}.mdif.png
else
echo "Usage: ${0} {imagefilename}\n!exists ${1}"
fi
函数运行时允许您使函数异步并返回任务。
在这种情况下,我们可以等待调用,这样我们就可以正常处理异常了。