c# - Xamarin表单-C#-异步和等待不起作用?

标签 c# ios xamarin.forms async-await

我在用C#中的async和await方法苦苦挣扎。
我想确保在进行API调用之前已填充“clientToken”变量。
然后,我在函数await前面放了一个gateway.ClientToken.Generate();方法,但它返回一个错误:

错误CS1061:“字符串”不包含“GetAwaiter”的定义,找不到可以接受的扩展方法“GetAwaiter”,该类型接受第一个类型为“字符串”的参数(是否缺少using指令或程序集引用?)

这是我的代码:


public Braintree()
        {
            InitializeComponent();
            Task task = GetBraintreeToken();
        }

private async Task GetBraintreeToken()
        {
            var gateway = new BraintreeGateway
            {
                Environment = Environment.SANDBOX,
                MerchantId = "xxxx",
                PublicKey = "xxx",
                PrivateKey = "xxxx"
            };

            var clientToken = await gateway.ClientToken.Generate();

            Result<PaymentMethodNonce> result_nonce = gateway.PaymentMethodNonce.Create(clientToken);
         }

最佳答案

不管其他任何问题, Generate 只会返回string

返回包含所有授权和配置的字符串
您的客户端初始化客户端SDK所需的信息
与Braintree交流。

对你的问题

我想确保在之前填充“clientToken”变量
继续进行API调用。

您需要做的就是删除await,字符串不是等待的,并且该函数立即同步返回
还要注意,方法await中没有要GetBraintreeToken的内容,因此它不需要async关键字或返回Task
如果要异步运行它,则可以从构造函数或页面Task.Run()事件中的OnAppearing调用它
例如,给定

private void GetBraintreeToken()
{ ...
你可以
public Braintree()
{
    InitializeComponent();
    Task.Run(() => GetBraintreeToken());
}

关于c# - Xamarin表单-C#-异步和等待不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63823388/

相关文章:

c# - 如何使用 itextsharp 将 UTF-8 字符写入 pdf 文件?

c# - StreamSocket.InputStreamOptions.ReadAsync 在使用 Wait() 时挂起

ios - 如何使用数组作为标题和 AFNetworking 进行 POST

c# - 带有 Windows 手机的 Xamarin 表单 - MediaElement 无法正常工作

xamarin.forms - 使用 MvvmCross 6.2.1 和 Xamarin.Forms 清除导航堆栈

c# - Xamarin XAML : Placing a Grid over an Image (responsive to screen size)

c# - Windows 桌面 ScreenMarker

c# - 如何忽略将 xml 反序列化为对象时的 soap 内容?

iOS:UITextView 未更新添加新内容

ios - swift 中嵌套闭包内的位置引用的闭包参数