我想从调用另一个异步函数的函数返回一个字符串。你能告诉我这是否可行吗?这是我的职责
public async Task<TokenCredential> LoginAsync()
{
var credential = await GenerateCredentialAsync(); // This is a library function
//that returns a 'Task<TokenCredential>'
return credential.Token; // I want to return this value which is a string
}
我只想返回令牌值。但是,如果我更改返回类型。我收到编译器错误
“等待操作符只能在异步方法中使用”
。
如果我完全删除等待,如下所示:
public string LoginAsync()
{
var credential = GenerateCredentialAsync();
return credential.Token;
}
尝试取消引用credential.token时出现此错误
'Task <TokenCredential>不包含Token的定义。
你能帮忙吗?
实际上,应该Task<TokenCredential>
提供方法的返回类型,Token
以使凭证的属性返回a TokenCredential
。如果Token属性返回string
,则该方法的返回类型应为Task<string>
。到现在为止还挺好。
问题可能是您如何调用该LoginAsync()
方法。由于这是异步的,因此您应该等待它:
TokenCredential token = await LoginAsync();
这要求您从标记为的方法中调用它async
。
如果将LoginAsync
方法定义为同步方法,则需要先获取的结果,GenerateCredentialAsync()
然后才能从LoginAsync()方法返回。您可以通过阻止Result
返回的属性来做到这一点Task
:
public string LoginAsync()
{
var credential = GenerateCredentialAsync().Result;
return credential.Token;
}
请注意,尽管不建议使用后一种方法。有关为什么不应该阻止异步代码的更多信息,请参阅Stephen Cleary的博客文章:http : //blog.stephencleary.com/2012/07/dont-block-on-async-code.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句