【问题标题】:How to make a single line GET method asynchronous? [closed]如何使单行GET方法异步? [关闭]
【发布时间】:2022-01-07 12:02:05
【问题描述】:

最佳实践要求对数据库的异步访问应该是强制性的,但是我无法在 GET 方法中做到这一点:

public class DataRepository
{
    private ContextDb _contextDb;

    public DataRepository(ContextDb dbInstance)
    {
        _contextDb = dbInstance;
    }
    //--------GETs----------
    public async Task<IAsyncEnumerable<Answer>> GetAnswers()
    {
        return _contextDb.Answers.AsAsyncEnumerable();
    }

上述 GetAnswers() 中的问题是我不能将“await”运算符放在“return”之前或之后,因此目前它是同步运行的。

以前的方法是这样的:

public Answer[] GetAnswers()
    {
        return _contextDb.Answers.ToArray();
    }

将其转换为异步方法的正确方法是什么?在这种情况下是否应该实施?

【问题讨论】:

  • Best practices dictates that asynchronous access to the database should be mandatory -- 请引用。
  • 你不能简单地删除async关键字吗?如果AsAsyncEnumerable 正在返回一个任务,这还不够吗?另外,为什么不能在return 关键字之后添加await 关键字?是什么阻止了你?

标签: c# asp.net entity-framework asynchronous asp.net-web-api


【解决方案1】:

关注Lasse V. Karlsen comment

您不能简单地删除async 关键字吗?如果AsAsyncEnumerable 正在返回一个任务,这还不够吗?另外,为什么不能在return 关键字之后添加await 关键字?是什么阻止了你?

我删除了 async 关键字,它现在可以工作了:

public IAsyncEnumerable<Answer> GetAnswers()
{
    return _contextDb.Answers.AsAsyncEnumerable();
}

我检查了下面的链接,它确实像我想要的那样工作(不知道没有asyncawait 可以完成异步编程)。

Microsoft IAsyncEnumerable Info

【讨论】:

  • 请使用您问题上的编辑链接添加其他信息。 Post Answer 按钮应仅用于问题的完整答案。 - From Review
  • @YevgeniyKosmak - 这是一个答案,而不是信息请求。
猜你喜欢
  • 2015-10-18
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多