C# 不包含';GetWaiter';调用异步方法时
我得到了编译器错误 CS1061“MAUserVM”不包含“GetWaiter”和 没有可访问的扩展方法“GetWaiter”接受第一个参数 找不到类型为“MAUserVM”的(是否缺少using指令 或程序集引用?) 异步方法C# 不包含';GetWaiter';调用异步方法时,c#,async-await,C#,Async Await,我得到了编译器错误 CS1061“MAUserVM”不包含“GetWaiter”和 没有可访问的扩展方法“GetWaiter”接受第一个参数 找不到类型为“MAUserVM”的(是否缺少using指令 或程序集引用?) 异步方法 public class MAUserVM { public string AuthenticationStatus; public MAUser mAUser; public async Task<MAUserVM> GetMA
public class MAUserVM
{
public string AuthenticationStatus;
public MAUser mAUser;
public async Task<MAUserVM> GetMAUserAsync(string Email, string Password, IConfiguration configuration, IHttpContextAccessor accessor)
{
...
}
}
private async Task<Boolean> AuthenticateUser(string email, string password)
{
...
// exception happening here
userVM = await userVM.GetMAUserAsync(email, password, _configuration, _accessor).Result;
...
}
公共类MAUserVM
{
公共字符串身份验证状态;
公共毛瑟毛瑟;
公共异步任务GetMAUserAsync(字符串电子邮件、字符串密码、IConfiguration配置、IHttpContextAccessor访问器)
{
...
}
}
调用方法
public class MAUserVM
{
public string AuthenticationStatus;
public MAUser mAUser;
public async Task<MAUserVM> GetMAUserAsync(string Email, string Password, IConfiguration configuration, IHttpContextAccessor accessor)
{
...
}
}
private async Task<Boolean> AuthenticateUser(string email, string password)
{
...
// exception happening here
userVM = await userVM.GetMAUserAsync(email, password, _configuration, _accessor).Result;
...
}
private async Task AuthenticateUser(字符串电子邮件、字符串密码)
{
...
//这里发生了例外情况
userVM=await userVM.GetMAUserAsync(电子邮件、密码、\u配置、\u访问器)。结果;
...
}
这是什么原因造成的?修复程序
//userVM = await userVM.GetMAUserAsync(email, password, _configuration, _accessor).Result;
userVM = await userVM.GetMAUserAsync(email, password, _configuration, _accessor);
短篇小说 您正在调用
任务的结果
,该任务返回T
(又称MAUserVM
),然后尝试等待它
长话短说
您可以await
公开GetAwaiter
的任何实例(作为实例方法或扩展方法)。GetAwaiter
需要实现INotifyCompletion
接口(以及可选的ICriticalNotifyCompletion
接口),并返回一个本身公开多个成员的类型<代码>任务
就是实现上述功能的对象之一(这就是为什么您可以等待它的原因)
编译器错误告诉您,MAUserVM
没有GetAwaiter
方法,因为您已经使用该方法从任务
检索了它(结果)
获取此任务的结果值
更多信息
在现代的.Net中,如果你发现你的自我调用结果
,等待
或类似的黑客行为,总是想自己有一个更好的方法,那就是
通常只需呼叫等待
。如果忽略此建议,则可能会阻塞异步方法,并发现自己存在死锁、复杂的聚合异常或难以调试的问题
其他资源