我收到编译器错误
CS1061“MAUserVM”不包含“GetAwaiter”的定义,并且找不到接受“MAUserVM”类型的第一个参数的可访问扩展方法“GetAwaiter”(您是否缺少 using 指令或程序集引用?)
异步方法
public class MAUserVM
{
public string AuthenticationStatus;
public MAUser mAUser;
public async Task<MAUserVM> GetMAUserAsync(string Email, string Password, IConfiguration configuration, IHttpContextAccessor accessor)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
调用方法
private async Task<Boolean> AuthenticateUser(string email, string password)
{
...
// exception happening here
userVM = await userVM.GetMAUserAsync(email, password, _configuration, _accessor).Result;
...
}
Run Code Online (Sandbox Code Playgroud)
是什么原因造成的?
修复
//userVM = await userVM.GetMAUserAsync(email, password, _configuration, _accessor).Result;
userVM = await userVM.GetMAUserAsync(email, password, _configuration, _accessor);
Run Code Online (Sandbox Code Playgroud)
短篇故事
您正在调用返回(又名)的Resulta ,然后尝试它。TaskTMAUserVMawait
故事很长
您可以公开await任何实例GetAwaiter(作为实例方法或扩展方法)。AGetAwaiter需要实现INotifyCompletion接口(以及可选的ICriticalNotifyCompletion接口)并返回一个本身公开多个成员的类型。Task就是一个实现上述内容的对象(这就是为什么你可以await这样做)
编译器错误告诉您MAUserVM没有该GetAwaiter方法,因为您已经通过使用该方法检索了它(结果) 。TaskResult
获取 this 的结果值
Task<TResult>。
此外
在现代.Net中,如果您发现自己的自我调用Result或Wait类似的黑客行为,请始终认为自己有更好的方法,而这种方法通常只是调用await。如果您忽略此建议,您可能会阻塞异步方法,并发现自己遇到死锁、复杂的聚合异常或难以调试的问题。
其他资源
| 归档时间: |
|
| 查看次数: |
6916 次 |
| 最近记录: |