是否可以“等待yield return DoSomethingAsync()”

2023-12-10

常规迭代器块(即“yield return”)与“async”和“await”不兼容吗?

这很好地说明了我正在尝试做的事情:

async Task<IEnumerable<Foo>> Method(String [] Strs)
{
    // I want to compose the single result to the final result, so I use the SelectMany
    var finalResult = UrlStrings.SelectMany(link =>   //i have an Urlstring Collection 
                   await UrlString.DownLoadHtmlAsync()  //download single result; DownLoadHtmlAsync method will Download the url's html code 
              );
     return finalResult;
}

但是,我收到编译器错误,指出“无法从资源加载消息字符串”。

这是另一种尝试:

async Task<IEnumerable<Foo>> Method(String [] Strs)
{
    foreach(var str in strs)
    {
        yield return await DoSomethingAsync( str)
    }
}

但编译器再次返回错误:“无法从资源加载消息字符串”。


这是我项目中的真实编程代码

当我有一个列表任务时,这非常有用,该任务可以从 URL 下载 HTML 我使用语法“yield return wait task”,结果是我想要的IEnumerable<Foo>。我不想写这段代码:

async Task<IEnumerable<String>> DownLoadAllURL(String [] Strs)
{
    List<Foo> htmls= new ...
    foreach(var str in strs)
    {
        var html= await DownLoadHtmlAsync( str)
        htmls.Add(item)
    }
    return htmls;
}

但看来我必须这么做。

谢谢你的帮助。


您所描述的内容可以通过Task.WhenAll方法。请注意代码如何变成简单的一行代码。发生的情况是每个单独的网址开始下载,然后WhenAll用于将这些操作组合成一个Task这是可以期待的。

Task<IEnumerable<string>> DownLoadAllUrls(string[] urls)
{
    return Task.WhenAll(from url in urls select DownloadHtmlAsync(url));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以“等待yield return DoSomethingAsync()” 的相关文章

随机推荐

  • DropDownList 的编辑器模板

    我为字符串字段创建了一个 EditorTemplate 它实现了引导程序 如下所示 using MyProject model object div class form group Html LabelFor m gt m new cla
  • 无法将数据表绑定到图表控件

    我想在我的测试应用程序中使用极坐标图 我有一个包含几列的数据表 其中名称为 X 的列应提供 x 值成员 其他列应提供 y 值成员 我在 MSDN 上找到了一个教程 但它并没有真正起作用 因为该行 chart1 DataBindTable d
  • 使用 Highcharts 通过 JSON 重新加载图表数据

    我正在尝试根据页面中其他位置的按钮单击 通过 JSON 重新加载 Highcharts 图表的数据 最初 我想显示一组默认数据 按类别支出 然后根据用户输入加载新数据 例如 按月支出 我能想到的从服务器输出 JSON 的最简单方法是将 GE
  • 如何在“打开方式”对话框中设置程序名称?

    我想要程序读取VLC Move on end 我已将程序集信息修改为以下内容 但无济于事 如何更改 打开方式 对话框中显示的名称 它作为FriendlyAppName 值存储在注册表中的HKCR Applications YourExeNa
  • ASP.NET 中 Session 对象的使用

    我刚刚接到一项新任务来引导其他人创建的网站 但我对网络绝对是新手 该网站采用 ASP NET C 语言 除了Session对象之外 代码本身并不难理解 我不明白它在哪里 如何以及为什么使用 请问有人可以用一个可能的例子解释 Session
  • 如何在 Project Reactor 中实现轮询逻辑?

    我有一个方法发送请求以获取作业状态并返回状态 如下所示 Mono
  • JavaScript 中命名函数优于匿名函数吗? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript var functionName function 与 function functionName 在 Javascript 中提取函数有两种可能的方法 var foo func
  • 自由飞行相机 - 绕 X 轴奇怪的旋转

    所以我几乎使用矢量和 gluLookAt 之类的东西实现了一个自由飞行相机 所有 4 个方向的移动和绕 Y 轴的旋转都可以正常工作 For the 绕Y轴旋转我计算眼睛和中心向量之间的向量 然后用旋转矩阵旋转它 如下所示 Vector te
  • 使用托管组件链接到静态库

    在为我的个人小应用程序创建 GUI 后 我尝试将其编译为静态库以在另一个项目中使用 GUI 已创建 并通过托管公共引用类执行其他任务 该类当前只有 5 个函数 但将添加到其中 这是我在静态库中的头文件 它将包含在另一个项目中 好吧 至少是一
  • 服务器和客户端的区别

    服务器和客户端有什么区别 它对某些软件安装有什么区别 例如 我检查了如何下载和安装 cvs 其中一位用户询问了服务器或客户端 服务器是等待传入请求的程序或机器 客户端是向服务器发送请求的程序或机器 维基百科 服务器 计算 客户端 计算 对于
  • 文件数量巨大时如何提高perl中的grep效率

    我想使用 perl 从位于以下目录结构的日志文件中 grep 一些日志信息 jobDir jobXXXX host log where XXXX是职位编号 从 1 到几千 下没有其他类型的子目录 jobDir除了下面的日志之外没有其他文件j
  • Oracle:如果行不存在,如何插入

    在 PL SQL oracle 中 如果行不存在 插入行的最简单方法是什么 我想要类似的东西 IF NOT EXISTS SELECT FROM table WHERE name jonny THEN INSERT INTO table V
  • Firefox 上的 event.target

    var x event target event srcElement document getElementById x id style left 200 px document getElementById x id style to
  • 创建项目后更改视图引擎

    我在asp net mvc4中创建了一个项目并将其视图引擎设置为ASPX 现在 我想将 View Engine 更改为 Razor 怎么做 我不想创建一个新项目 我想使用现有项目来更改视图引擎 我们可以从属性或其他方式更改视图引擎吗 应该像
  • 处理塔防游戏 - 塔攻击敌人

    我会保持简短 我正在制作一个塔防游戏作为一个迷你项目 同时我有一些空闲时间 我正在尝试弄清楚如何实现塔 以便能够在敌人进入射程时使用 dist 射击敌人但我只是不知道如何实现使用敌人位置和塔位置的方法 我有一个 CreepSprites 和
  • 如何防止Chrome在自动填充用户名/密码时更改字体?

    我有一个包含用户名和密码输入的登录表单 在 Windows 上的 Chrome 中 在其他浏览器或 Mac 上不会发生这种情况 当将鼠标悬停在 Chrome 密码管理器中保存的用户名上时 字体会发生变化 字体的变化然后改变了输入的宽度 使我
  • dataTableOutput 顶部和底部的空“row-fluid”div

    我有一个使用 renderDataTable 创建输出的闪亮示例 我删除了所有可能的选项 分页 过滤 搜索等 但是 现在我的表输出的顶部和底部有一个空白行 以前是过滤和搜索的地方 仅当我删除了过滤和搜索选项时 如何从数据表包装器内部删除这两
  • 什么是 Mocha 平等测试?

    我正在使用 Mocha 测试 Express Node 应用程序 我想要进行以下测试 比较两个空数组 assert equal 通过 但是 Mocha 给了我以下错误 AssertionError 我应该使用哪种方法才能通过两个空数组的比较
  • ncurses 和 stdin 阻塞

    I have stdin in a select set and I want to take a string from stdin whenever the user types it and hits Enter But select
  • 是否可以“等待yield return DoSomethingAsync()”

    常规迭代器块 即 yield return 与 async 和 await 不兼容吗 这很好地说明了我正在尝试做的事情 async Task