我正在使用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);
}
答案 0 :(得分:5)
不管其他任何问题,Generate
只会返回一个string
。
返回一个包含所有授权和配置的字符串 您的客户端初始化客户端SDK所需的信息 与Braintree交流。
您的问题
我想确保在之前填充“ clientToken”变量 继续进行API调用。
您需要做的就是删除await
, strings 不是 awaitable ,并且函数立即同步返回
还请注意,方法await
中GetBraintreeToken
不需要任何操作,因此它不需要async
关键字或返回Task
。
如果您想异步运行 ,则可以在构造函数或页面Task.Run()
事件中的OnAppearing
中调用它
例如,给定
private void GetBraintreeToken()
{ ...
您可以
public Braintree()
{
InitializeComponent();
Task.Run(() => GetBraintreeToken());
}