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
}