我在用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/