如果使它异步,是否会破坏Cosmos DB V1触发功能应用程序?

时间:2018-09-28 11:31:40

标签: azure azure-functions azure-cosmosdb

为了使用HTTPClient并从我的azure函数应用Cosmos DB触发器V1发布到Web服务,我不得不使Function异步(默认情况下不是它)

更改

{{#get "tags" limit="all" include="count.posts"}}
   {{#foreach tags}}
      // Do tag magic here, then get the posts for the tag
      {{#get "posts" filter="tag:{{slug}}" limit="all" order="published_at desc"}}
          {{#foreach posts}}
            // Do post magic here
          {{/foreach}}
      {{/get}}                     
   {{/foreach}}
{{/get}}

收件人

 public static class Function1
    {
        [FunctionName("Function1")]
        public static void RunAsync([CosmosDBTrigger(

请注意第二个功能触发器定义中的异步部分

我需要这个,因为稍后在该函数中,我将按以下方式使用http客户端,并且必须使用await

public static class Function1
    {
        [FunctionName("Function1")]
        public static async void RunAsync([CosmosDBTrigger(

我是通过使触发器不同步来破坏触发器,还是这是一个可接受且受支持的更改?

如果没有,如何更改httpCLient的使用以在触发器Function App中工作?

注意:代码按预期运行,我只是担心它到目前为止还是会出错。

1 个答案:

答案 0 :(得分:1)

无需担心异步修改器,它对Azure函数的工作方式没有影响。

Azure函数可确保在执行我们的自定义代码之前检测到触发事件并填充相应的参数。异步和等待只能对我们自定义的代码有所不同。

例如

Task<HttpResponseMessage> task = httpClient.PostAsync("https://XXXXX", new StringContent(transaction.ToString(), System.Text.Encoding.UTF8, "application/json"));

// Some synchronous code doesn't rely on the response
...

HttpResponseMessage response =  await task;

我们通常单独创建任务以利用异步。函数在等待http请求任务完成的同时继续执行其他代码。这就是我们所说的异步。其他代码完成后,我们将使用await来确保获得所需的响应,因为没有多余的代码可使用。

您的代码等待任务立即完成,而没有异步执行任何代码,因此它实际上按照以前的顺序执行。