Konwersja kodu z C# na F# i async lambda

Konwersja kodu z C# na F# i async lambda
W2
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć

Mam fragment kodu C# (Pulumi), który chciałbym przekonwertować na F#:

Kopiuj
var registryInfo = repo.RegistryId.Apply(async (id) =>
        {
            var creds = await GetCredentials.InvokeAsync(new GetCredentialsArgs {RegistryId = id});
            var decodedData = Convert.FromBase64String(creds.AuthorizationToken);
            var decoded = ASCIIEncoding.ASCII.GetString(decodedData);

            var parts = decoded.Split(':');

            return new ImageRegistry
            {
                Server = creds.ProxyEndpoint,
                Username = parts[0],
                Password = parts[1],
            };
        });

Kod względnie prosty. Problem mam natomiast z przeniesieniem tego na F# - ta asynchroniczna lambda sprawia mi sporo problemu. Oto co mam w tej chwili:

Kopiuj
let registryInfo = repo.RegistryId.Apply (fun id -> async {
let! creds = GetCredentialsArgs ( RegistryId = id) |> GetCredentials.InvokeAsync |> Async.AwaitTask
let decodedData = Convert.FromBase64String creds.AuthorizationToken
let decoded = ASCIIEncoding.ASCII.GetString decodedData
let parts = decoded.Split ':'
return ImageRegistry( Server = input creds.ProxyEndpoint, Username= input parts.[0], Password = input parts.[1])
} 
) 

Problem jest taki że w C# registry info zwraca Output<ImageRegistry>, co jest oczekiwanym wynikiem, natomiast F# zwraca Output<Async<ImageRegistry>>, co nie jest poprawne. Powiem szczerze że sporo naszukałem się nt tego typu asynchroniczności ale chyba nie potrafię zatosować tego w praktyce. W jaki sposób powinno to być napisane poprawnie ? :-)
Dopiero zaczynam z F# żeby trochę poszerzyć swoje horyzonty

Mondonno
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska
  • Postów: 88
0

Nie znam się zbytnio na F# ale wystarczyło, troche poogoglować
https://stackoverflow.com/questions/24837513/f-async-lambda-declaration

Daj znać czy o to ci chodziło

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.