Xamarin表单-C#-Async和wait不工作?

Xamarin表单-C#-Async和wait不工作?,c#,ios,xamarin.forms,async-await,C#,Ios,Xamarin.forms,Async Await,我正在努力使用C#中的异步和等待方法 我想确保在继续API调用之前填充了“clientToken”变量 然后在函数gateway.ClientToken.Generate()前面放置一个wait方法但它返回了一个错误: 错误CS1061:“字符串”不包含“GetAwaiter”的定义,并且找不到可访问的扩展方法“GetAwaiter”,该扩展方法接受类型为“string”的第一个参数(是否缺少using指令或程序集引用?) 这是我的密码: public Braintree()

我正在努力使用C#中的异步和等待方法

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

然后在函数
gateway.ClientToken.Generate()前面放置一个
wait
方法但它返回了一个错误:

错误CS1061:“字符串”不包含“GetAwaiter”的定义,并且找不到可访问的扩展方法“GetAwaiter”,该扩展方法接受类型为“string”的第一个参数(是否缺少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);
         }

公共大脑树()
{
初始化组件();
任务任务=GetBraintreeToken();
}
私有异步任务GetBraintreeToken()
{
var网关=新的BraintreeGateway
{
Environment=Environment.SANDBOX,
MerchantId=“xxxx”,
PublicKey=“xxx”,
PrivateKey=“xxxx”
};
var clientToken=wait gateway.clientToken.Generate();
Result\u nonce=gateway.PaymentMethodNonce.Create(clientToken);
}

忽略任何其他问题,只返回一个
字符串

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

回答你的问题

我想确保我的“clientToken”变量在 继续进行API调用

您只需删除
await
,字符串不是可等待的,函数立即同步返回

还要注意的是,在您的方法
GetBraintreeToken
中没有什么可以等待的
,因此它不需要
async
关键字或返回
任务

如果要异步运行它,可以从构造函数中的
Task.run()
调用它,也可以在出现的
事件中调用它

例如给定

private void GetBraintreeToken()
{ ...
你可以

public Braintree()
{
    InitializeComponent();
    Task.Run(() => GetBraintreeToken());
}

忽略任何其他问题,只返回一个
字符串

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

回答你的问题

我想确保我的“clientToken”变量在 继续进行API调用

您只需删除
await
,字符串不是可等待的,函数立即同步返回

还要注意的是,在您的方法
GetBraintreeToken
中没有什么可以等待的
,因此它不需要
async
关键字或返回
任务

如果要异步运行它,可以从构造函数中的
Task.run()
调用它,也可以在出现的
事件中调用它

例如给定

private void GetBraintreeToken()
{ ...
你可以

public Braintree()
{
    InitializeComponent();
    Task.Run(() => GetBraintreeToken());
}

如果
Generate
方法包含可以运行异步的代码,则可以将该方法更改为
async任务,而不是
string
,并从中调用异步方法。如果没有,那么将此方法设置为异步就没有意义,您将无法等待它。您只能等待任务如果
Generate
方法包含可以运行异步的代码,您可以将该方法更改为
async Task
,而不是
string
,并从中调用异步方法。如果没有,那么将此方法设置为异步就没有意义,您将无法等待它。您只能等待任务