I have a problem that I can't fix:

In C# Xamarin Android, I am using an external library that takes a Func<string, string?> as a parameter.
but in the main time, I have to ask the user for inputs in it.

so it shows a user a dialog and waits for his input. and it depends on the UI context.

so if I did it like this: ShowOtpDialog().Result it blocks the main UI and causes a deadlock.
Can you solve this problem?



//Client is an External library that I can't modify and it accepts Func<string, string?>.
var client = new Client(ConfigProvider);

//Can't be async
private static string? ConfigProvider(string what)
{
        switch (what)
        {
                case "phone_number": return "123467890";
                case "verification_code": return ShowOtpDialog().Result;
                default: return null;
        }
}

//This one you can replace or modify, it's main purpose is to get user inputs.
public static async Task<string?> ShowOtpDialog()
{
        var taskCompletionSource = new TaskCompletionSource<string?>();
        var layoutInflater = LayoutInflater.FromContext(Application.Context)!;
        var view = layoutInflater.Inflate(Resource.Layout.OtpDialog, null);

        var otpEditText = view!.FindViewById<EditText>(Resource.Id.dialog_input)!;

        var dialogBuilder = new AlertDialog.Builder(view.Context)
                .SetTitle("Enter OTP")
                .SetMessage("Please enter the OTP you received:")
                .SetView(view)
                .SetCancelable(false)
                .SetPositiveButton("OK", (_, _) =>
                {
                        var otp = otpEditText.Text;
                        taskCompletionSource.SetResult(otp);
                });
        var dialog = dialogBuilder.Create();

        dialog.Show();
        return await taskCompletionSource.Task;
}