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

时间:2020-09-10 05:34:07

标签: c# ios xamarin.forms async-await

我正在使用C#中的 async and 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);
         }

1 个答案:

答案 0 :(得分:5)

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

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

您的问题

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

您需要做的就是删除await strings 不是 awaitable ,并且函数立即同步返回

还请注意,方法awaitGetBraintreeToken不需要任何操作,因此它不需要async关键字或返回Task

如果您想异步运行 ,则可以在构造函数或页面Task.Run()事件中的OnAppearing中调用它

例如,给定

private void GetBraintreeToken()
{ ...

您可以

public Braintree()
{
    InitializeComponent();
    Task.Run(() => GetBraintreeToken());
}
相关问题