porta microsoft management c# azure asynchronous azure-functions

c# - microsoft - porta azure



¿Cómo puedo vincular los valores de salida a mi función asíncrona Azure? (3)

Los métodos asíncronos pueden devolver valores normalmente, pero no debe devolver el tipo puro de valor, use la tarea en su lugar, así:

public static async Task<string> Run(string input, TraceWriter log, string blobOutput) { log.Info($"C# manually triggered function called with input: {input}"); await Task.Delay(1); blobOutput = input; return blobOutput; }

¿Cómo puedo vincular mis salidas a una función asíncrona? El método habitual de configurar el parámetro para out no funciona con las funciones asíncronas.

Ejemplo

using System; public static async void Run(string input, TraceWriter log, out string blobOutput) { log.Info($"C# manually triggered function called with input: {input}"); await Task.Delay(1); blobOutput = input; }

Esto da como resultado un error de compilación:

[timestamp] (3,72): error CS1988: Async methods cannot have ref or out parameters

Encuadernación utilizada (fyi)

{ "bindings": [ { "type": "blob", "name": "blobOutput", "path": "testoutput/{rand-guid}.txt", "connection": "AzureWebJobsDashboard", "direction": "out" }, { "type": "manualTrigger", "name": "input", "direction": "in" } ], "disabled": false }


Aún no tengo la reputación de poder hacer un comentario, pero en el código anterior de Zain Rizvi, debería decir IAsyncCollector:

public static async Task Run(string input, IAsyncCollector<string> collection, TraceWriter log) { log.Info($"C# manually triggered function called with input: {input}"); await collection.AddAsync(input); }


Hay un par de maneras de hacer esto:

Enlace el resultado al valor de retorno de la función (más fácil)

Entonces simplemente puede devolver el valor de su función. Deberá configurar el nombre del enlace de salida en $return para usar este método

Código

public static async Task<string> Run(string input, TraceWriter log) { log.Info($"C# manually triggered function called with input: {input}"); await Task.Delay(1); return input; }

Unión

{ "bindings": [ { "type": "blob", "name": "$return", "path": "testoutput/{rand-guid}.txt", "connection": "AzureWebJobsDashboard", "direction": "out" }, { "type": "manualTrigger", "name": "input", "direction": "in" } ], "disabled": false }

Enlace el resultado a IAsyncCollector

Enlace el resultado a IAsyncCollector y agregue su elemento al recopilador.

Querrá utilizar este método cuando tenga más de un enlace de salida.

Código

public static async Task Run(string input, IAsyncCollector<string> collection, TraceWriter log) { log.Info($"C# manually triggered function called with input: {input}"); await collection.AddAsync(input); }

Unión

{ "bindings": [ { "type": "blob", "name": "collection", "path": "testoutput/{rand-guid}.txt", "connection": "AzureWebJobsDashboard", "direction": "out" }, { "type": "manualTrigger", "name": "input", "direction": "in" } ], "disabled": false }