Comment lier mes sorties à une fonction asynchrone? La méthode habituelle de définition du paramètre sur out
ne fonctionne pas avec les fonctions asynchrones.
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;
}
Cela entraîne une erreur de compilation:
[timestamp] (3,72): error CS1988: Async methods cannot have ref or out parameters
Reliure utilisée (fyi)
{
"bindings": [
{
"type": "blob",
"name": "blobOutput",
"path": "testoutput/{Rand-guid}.txt",
"connection": "AzureWebJobsDashboard",
"direction": "out"
},
{
"type": "manualTrigger",
"name": "input",
"direction": "in"
}
],
"disabled": false
}
Il y a plusieurs façons de le faire:
Ensuite, vous pouvez simplement renvoyer la valeur de votre fonction. Vous devez définir le nom de la liaison de sortie sur $return
pour pouvoir utiliser cette méthode.
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;
}
{
"bindings": [
{
"type": "blob",
"name": "$return",
"path": "testoutput/{Rand-guid}.txt",
"connection": "AzureWebJobsDashboard",
"direction": "out"
},
{
"type": "manualTrigger",
"name": "input",
"direction": "in"
}
],
"disabled": false
}
Liez la sortie à IAsyncCollector et ajoutez votre élément au collecteur.
Vous voudrez utiliser cette méthode lorsque vous avez plusieurs liaisons de sortie.
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);
}
{
"bindings": [
{
"type": "blob",
"name": "collection",
"path": "testoutput/{Rand-guid}.txt",
"connection": "AzureWebJobsDashboard",
"direction": "out"
},
{
"type": "manualTrigger",
"name": "input",
"direction": "in"
}
],
"disabled": false
}
Je n'ai pas encore la réputation de pouvoir faire un commentaire, mais dans le code ci-dessus de Zain Rizvi, il devrait être indiqué par 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);
}
Les méthodes asynchrones peuvent renvoyer des valeurs normalement, mais vous ne devriez pas renvoyer le type pur de valeur, utilisez plutôt Task comme ceci:
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;
}