Ich habe folgende Interface-Methode:Umschreiben von C# -Code mit Task.WhenAll in F #
Task<string[]> GetBlobsFromContainer(string containerName);
und deren Umsetzung in C#:
var container = await _containerClient.GetContainer(containerName);
var tasks = container.ListBlobs()
.Cast<CloudBlockBlob>()
.Select(b => b.DownloadTextAsync());
return await Task.WhenAll(tasks);
Wenn ich versuche, es in F # neu zu schreiben:
member this.GetBlobsFromContainer(containerName : string) : Task<string[]> =
let task = async {
let! container = containerClient.GetContainer(containerName) |> Async.AwaitTask
return container.ListBlobs()
|> Seq.cast<CloudBlockBlob>
|> Seq.map (fun b -> b.DownloadTextAsync())
|> ??
}
task |> ??
Ich bin mit den letzten Zeilen fest.
Wie zurück zu Task<string[]>
von F # richtig?
Entschuldigung, ich vermisse es, 'containerClient.GetContainerReference' zu beschreiben. Es ist eine Abstraktion über "CloudStorageAccount" von Azure SDK. Und ja, Sie haben Recht, der tatsächliche Rückgabetyp ist "Task". War früher 'Task >' aber ich habe das geändert. –
abatishchev
Die Sache, die ich nicht kannte, ist 'Async.Parallel' und komplett vergessen' return! '. – abatishchev