首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何进行异步迭代器任务?

如何进行异步迭代器任务?

提问于 2018-03-15 20:11:17
回答 2关注 0查看 296

我试图实现一个返回迭代器的异步函数。代码如下:

代码语言:javascript
运行
AI代码解释
复制
    private async Task<IEnumerable<char>> TestAsync(string testString)
    {
        foreach (char c in testString.ToCharArray())
        {
            // do other work
            yield return c;
        }
    }

但是,有一个错误消息,该函数不能是迭代器块,因为Task<IEnumerable<char>>它不是迭代器接口类型。有解决方案吗?

回答 2

名字真难选a

回答已采纳

发布于 2018-03-16 04:43:51

这听起来像你可能真正在寻找的是类似的东西IObservable<T>,这就像一个基于推送的异步IEnumerable<T>。请参阅Reactive Extensions,即 Microsoft Open Technologies的Rx(代码为Apache-2.0许可的代码)(无隶属关系),其中包含大量与IObservable<T>LINQ to Objects以及其他更多工作相关的方法。

问题IEnumerable<T>在于没有任何东西确实使枚举本身异步。如果你不想增加对Rx的依赖(这实际上是让你IObservable<T>发光的原因),这个选择可能适用于你:

代码语言:javascript
运行
AI代码解释
复制
public async Task<IEnumerable<char>> TestAsync(string testString)
{
    return GetChars(testString);
}

private static IEnumerable<char> GetChars(string testString)
{
    foreach (char c in testString.ToCharArray())
    {
        // do other work
        yield return c;
    }
}

如果不知道异步实际做了什么,可能有更好的方法来实现你的目标。

逆鳞若光

发布于 2018-03-16 05:53:28

为了详细说明以前的答案,你可以使用Observable.Create<TResult>的一系列方法来完成想要的功能。

这是一个例子:

代码语言:javascript
运行
AI代码解释
复制
var observable = Observable.Create<char>(async (observer, cancel) =>
{
    for (var i = 0; !cancel.IsCancellationRequested && i < 100; i++)
    {
        observer.OnNext(await GetCharAsync());
    }
});

你也可以在LINQPad中使用它:

代码语言:javascript
运行
AI代码解释
复制
// Create a disposable that keeps the query running.
// This is necessary, since the observable is 100% async.
var end = Util.KeepRunning();

observable.Subscribe(
    c => Console.WriteLine(c.ToString()),
    () => end.Dispose());
和开发者交流更多问题细节吧,去 写回答
相关文章
异步任务如何测试?
收到这样的问题,其实大家的问题都是通用的,那么正好整理下我的一些观点,供参考。
雷子
2022/12/29
1.1K0
采用线程池进行异步任务处理
被@Async修饰的方法叫做异步方法,这些异步方法会在新的线程中进行处理,不影响主线程的顺序执行。
春哥大魔王
2018/07/23
3.3K0
Node.js 中的异步迭代器
从 Node.js v10.0.0 开始,异步迭代器就出现中了,最近它们在社区中的吸引力越来越大。在本文中,我们将讨论异步迭代器的作用,还将解决它们可能用于什么目的的问题。
疯狂的技术宅
2020/05/11
1.8K0
Node.js 中的异步迭代器
什么是异步迭代?如何自定义迭代?一文详解ES6的迭代器与生成器
迭代器是帮助我们对某个数据结构进行遍历的对象,这个object有一个next函数,该函数返回一个有value和done属性的object,其中value指向迭代序列中当前next函数定义的值。
游魂
2023/10/17
3930
什么是异步迭代?如何自定义迭代?一文详解ES6的迭代器与生成器
python如何定时异步执行任务
昨天,我们介绍了在python3.5之后,对asyncio的操作,也初步认识了如何才能对网络进行异步请求。 今天我们就来讲下如何定时调用任务。 即刻生效 还记得昨天的 run_until_complete 吗,今天我们换个函数来用,call_soon call_soon 支持在下一次事件循环的迭代中执行提供的回调函数。回调函数只能传递位置参数,如果想指定关键字参数的话,可以使用 functools.partial 函数来辅助使用。 import asyncio import functools # 下面
用户1634449
2018/06/29
3.8K0
如何取消 JavaScript 中的异步任务
有时候执行异步任务可能是很困难的,尤其是在特定的编程语言不允许取消被错误启动或不再需要的操作时。幸运的是 JavaScript 提供了非常方便的功能来中止异步活动。在本文中,你可以学到如何创建可中止的函数。
疯狂的技术宅
2020/03/26
3.7K0
如何取消 JavaScript 中的异步任务
【Kotlin 协程】Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )
直到 调用 Channel#receive 函数 取走了缓冲区中的数据 , 缓冲区 有了空间 , Channel#send 函数才会恢复执行 ;
韩曙亮
2023/03/30
8890
【Kotlin 协程】Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )
springBoot异步任务、异步监控
除了自己实现线程外,springBoot本身就提供了通过注解的方式,进行异步任务的执行。下面主要记录一下,在springBoot项目中实现异步任务,以及对异步任务进行封装监控。
xcbeyond
2020/04/02
1.3K0
springboot任务之异步任务
此时我们启动服务器,并输出localhost:8080/hello,会在3s之后响应的success。
西西嘛呦
2020/08/26
4900
SpringBoot异步任务
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。
别团等shy哥发育
2023/02/25
4030
SpringBoot异步任务
Android异步任务
Android 异步任务队列实现AsynTask异步任务源代码解析 android异步任务 访问网络 加载图片 解决方案大集合 Android异步消息处理机制的源码分析 AsyncTask异步从网上下载图片 线程基本概念及编程 给 Android 开发者的 RxJava 详解 Android多线程编程的总结    ***************** 关于android中postDelayed方法的讲解 - 如是观的专栏 - 博客频道 - CSDN.NET 详细介绍AIDL 的使用 -
用户1733354
2018/05/22
7950
Map映射如何使用迭代器?
迭代器只针对集合类型的数据,因此map类型的必须先转换成集合类型才能使用迭代器去获取元素。
孙晨c
2019/11/21
1.3K0
JavaScript 中如何进行异步编程
JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。
江米小枣
2020/06/16
8520
JavaScript 中如何进行异步编程
结合异步迭代器实现 Node.js 流式数据复制
实现可读流到可写流数据复制,就是不断的读取->写入这个过程,那么你首先想到的是不是下面这样呢?代码看似很简单,结果却是很糟糕的,没有任何的数据积压处理。如果读取的文件很大了,造成的后果就是缓冲区数据溢出,程序会占用过多的系统内存,拖垮服务器上的其它应用,如果不明白的回顾下这篇文章 Node.js Stream 背压 — 消费端数据积压来不及处理会怎么样?。
五月君
2021/09/27
6550
探索异步迭代器在 Node.js 中的使用
上一节讲解了迭代器的使用,如果对迭代器还不够了解的可以在回顾下《从理解到实现轻松掌握 ES6 中的迭代器》,目前在 JavaScript 中还没有被默认设定 [Symbol.asyncIterator] 属性的内建对象,但是在 Node.js 中已有部分核心模块(Stream、Events)和一些第三方 NPM 模块(mongodb)已支持 Symbol.asyncIterator 属性。本文也是探索异步迭代器在 Node.js 中的都有哪些使用场景,欢迎留言探讨。
五月君
2020/12/14
8.1K0
探索异步迭代器在 Node.js 中的使用
迭代器模式 迭代器模式
提供一种顺序访问集合的元素而不暴露其底层表示的方法。 ——《设计模式:可复用面向对象软件的基础》
mingmingcome
2021/12/09
7890
迭代器模式
    





        迭代器模式
Django操作异步任务
新增的异步任务必须以task.py命名,而且要放在你的django-web程序中,我这里是web
cywhat
2023/04/27
7610
SpringBoot异步任务记录
简介 突发奇想,就想玩一下异步任务,记得之前项目有个场景需要使用异步执行,但是异步调用没有成功,后来采用了多线程去执行,今天就系统的学习下异步执行任务。记录一下 有时候在项目中,当访问其他人的接口较慢或者做耗时任务时,不想程序一直卡在耗时任务上,想程序能够并行执行, 我们可以使用多线程来并行的处理任务,也可以使用 spring 提供的异步处理方式 @Async 。 在异步处理的方法上添加注解 @Async ,就会启动一个新的线程去执行。 Spring 通过任务执行器 TaskExecutor ,来实现多线程
框架师
2021/08/05
6630
SpringBoot 异步任务处理
有些业务是不需要你同步去操作的, 例如: 适用于处理log、发送邮件、短信……等 我们不能因为短信没发出去而没有执行接下来的业务逻辑, 这个时候我们就应该去把这些耗时的任务弄成异步的
憧憬博客
2020/07/21
6400
点击加载更多

相似问题

如何进行视频批量上传?能否多任务并发进行?

0372

求疑问异步任务执行顺序 关于async的执行顺序?

023

如何从Rake任务中运行Rake任务?

2447

使用tensorflow进行迭代过程出现failed to allocate memory的bug?

12.5K

CSDK中at_client.c中client_parser()任务不进行阻塞,不会造成任务饥饿么?

057
相关问答用户
某公司 | 程序员擅长1个领域
腾讯云TDP | 先锋会员擅长2个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档