【问题标题】:How to write async linq如何编写异步 linq
【发布时间】:2013-08-13 03:48:10
【问题描述】:

我有这个问题:

public static class myClass
{ 

    list<something> myList = new list<something>();

    public void PopulateList()
    {
        var myQuery = from a in db.something
              where a.someproperty == somevar
              select a;   

        myList  = myQuery.Tolist();
    }
}

如何使这个查询异步?

【问题讨论】:

  • await Task.Factory.StartNew(() =&gt; PopulateList()); :)
  • 无需等待:P
  • @LewsTherin Tks,但我的需要是每隔 X 次自动启动此查询,它会返回一个长列表。
  • 很奇怪,你的 void 方法另有说明。
  • @LewsTherin 你是对的,也许我的样本不够解释

标签: c# linq entity-framework


【解决方案1】:

穷人的异步/等待

await Task.Factory.StartNew(() => PopulateList());

编辑

对于那些想看看它的用法的人

How can i send email one after one in a row?及其后续问题

How do i make that it will send the email only once?

【讨论】:

  • 为什么要await呢?如果你想要一个任务,你只需要StartNew,你可以直接返回任务。添加async 会使它变得更加昂贵并且不会增加任何东西。
  • @Servy 我知道一个混蛋会否决这个答案。如果您阅读了 Juan 多次要求的 cmets(顺便说一句,请阅读我和 Lews Therin 之间的 cmets)......
  • 我有,并且您已经在 cmets 中被告知为什么这样做不是一个好主意。其他人希望您将此作为答案发布并不能使它成为一个好的答案,也不应该被否决。如果您发布了具有理想解决方案的高质量答案,那么您可能不会被否决。仅供参考,侮辱其他人建设性地批评你的答案会增加你被拒绝投票的可能性,而不是减少它。
【解决方案2】:

实际上更有效的异步返回将是:

await Task.FromResult(PopulateList());

此代码返回已完成的任务,该任务针对需要将同步代码转换为异步的方法进行了优化。

您还需要将返回类型从 void 更改为 Task。

来源:Async in ASP.NET 在 aspConf 2012

【讨论】:

  • 这就是同步完成所有工作,而不是异步。
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 2021-12-19
  • 2021-02-06
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
相关资源
最近更新 更多