异步编程和Azure功能

时间:2018-01-19 11:13:23

标签: c# azure azure-functions

在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方法抛出异常怎么办?如何确保运行时知道它不完整,而应该放弃。

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

1 个答案:

答案 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

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

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