“await”运算符只能在异步方法中使用。考虑使用“async”修饰符标记此方法并更改其返回类型

c#

我看到有很多关于我收到的错误的问题-

错误 CS4032:“await”运算符只能在异步方法中使用。考虑使用“async”修饰符标记此方法并将其返回类型更改为“Task <Task <IList >>”。

这是代码-

     public async Task <IList <Alert>> ListOfAlerts (int id)
         {

             IList <Alert> returnList = new List <Alert> ();
             try
             {
                 Users currentUser = await _context.User.Where (x => x.Id == id) .FirstOrDefaultAsync ();

                returnList = await _context.Alert.Include (c => c.Group) .Where (x => x.UsersId == currentUser.Id) .ToListAsync ();

             }
             catch (Exception e)
             {
                 Console.WriteLine (e.Message);
             }

             return returnList;
         }

我根据答案编写了代码,然后我遇到了同样的错误。

我哪里错了?问候

回答

await的 (Quick)Watch 窗口中有一个ed 表达式;这些检查员不支持异步代码。

如果要检查查询的结果,请执行以下任一操作:

  • 按 F10 将当前指令前进一行,然后检查 returnList
  • 检查之后 的所有结果await(也没有变量赋值)并附加 a .Result,因此:
    • _context.Alert.Include(c => c.Group).Where(x => x.UsersId == currentUser.Id).ToListAsync().Result; (请注意,这可能会导致其他问题,尤其是在冻结线程或同步上下文代码中,AFAIK,基本上会使调试器死锁)
    • 或者,检查非异步变体: _context.Alert.Include(c => c.Group).Where(x => x.UsersId == currentUser.Id).ToList()

以上是“await”运算符只能在异步方法中使用。考虑使用“async”修饰符标记此方法并更改其返回类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>