【发布时间】:2017-02-14 02:24:24
【问题描述】:
我想从调用另一个异步函数的函数中返回一个字符串。你能告诉我这是否可能吗? 这是我的功能
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
}
我只想返回令牌值。但是如果我改变返回类型。我得到一个编译器错误
"await 运算符只能在异步方法中使用"
.
如果我像下面这样完全删除等待:
public string LoginAsync()
{
var credential = GenerateCredentialAsync();
return credential.Token;
}
尝试取消引用 credential.token 时出现此错误
'Task
不包含 Token 的定义。
你能帮忙吗?
【问题讨论】:
-
Token是什么类型?如果您使用return async Task<tokentype>而不是Task<TokenCredential>,您的第一个版本就可以使用。 -
以上没有多少意义,你的方法标有
async,但你说使用await时出错,上面也没有匿名类或代码。 -
这里的实际问题是什么,你不能从异步方法返回 just 令牌值,你必须返回一个最终将包含令牌的任务,因此返回类型的
Task<T>。在使用async时,您必须使用此返回类型(或void)。 -
另外,如果你不知道自己在做什么,你不应该尝试将异步方法包装在同步包装器中,这总是会导致死锁等问题。
标签: c# .net asynchronous async-await