问题标签 [iasyncenumerable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 将 IAsyncEnumerable 与 Dapper 一起使用
我们最近将我们使用的 ASP.NET Core API 迁移Dapper
到 .NET Core 3.1。迁移后,我们觉得有机会为我们的一个端点使用最新IAsyncEnumerable
功能。C# 8
这是更改前的伪代码:
IAsyncEnumerable
代码更改后:
上面的使用方法是从这篇文章ToAsyncEnumerable
中获得灵感的,但我不能 100% 确定我是否在正确的地方/上下文中使用它。
问题:
- dapper 库只返回
IEnumerable
,但我们可以用ToAsyncEnumerable
它把它转换成上面IAsyncEnumerable
的 forasync
stream
吗?
注意:这个问题看起来类似于如果与 async/await 一起使用,返回 IEnumerable 会发生什么(使用 Dapper 从 SQL Server 流式传输数据)?但我认为这不能回答我的问题。
c# - 在 foreach 循环中等待的正确方法
这是使用 async 使用 foreach 循环的正确方法吗?有没有更好更有效的方法?IAsyncEnumerable?(忽略两个表可以连接在一起的事实,这是一个简单的例子)
c# - 如何使用 SqlBulkCopy 编写 IAsyncEnumerable
我有以下方法返回一个IAsyncEnumerable<T>
:
我想使用SqlBulkCopy
'sWriteToServerAsync
方法将该结果流传输到数据库,但无法弄清楚如何将其转换为's 重载列表IDataReader
中的任何其他类型。WriteToServerAsync
我愿意使用除批量复制之外的其他东西,只要它性能合理。
c# - 如何安全地处理使用 await foreach 检索到的 IAsyncDisposable 对象?
我可以这样做吗using var
:
或者我应该这样做:
还是因为迭代器是 anIAsyncDisposable
并且await foreach
会为我做它,所以我可以不进行处理吗?
c# - .net 核心 3.1:'IAsyncEnumerable' 不包含 'GetAwaiter' 的定义
我有一个 .net core 3.1 控制台应用程序。
我有一个具有以下签名的方法:
如果我称之为:
我收到以下错误:
错误 CS1061“IAsyncEnumerable”不包含“GetAwaiter”的定义,并且找不到接受“IAsyncEnumerable”类型的第一个参数的可访问扩展方法“GetAwaiter”(您是否缺少 using 指令或程序集引用?)
c# - 如何在项目准备好后立即解析 IAsyncEnumerables 列表
如果我向这个函数发送 25 个 ID。第一个 FindByIdsQuery 需要 5000 毫秒。其他 4 个 FindByIdsQuery 需要 100 毫秒。然后这个解决方案不会输出任何实体,直到 5000 毫秒之后。是否有任何解决方案可以在有任何人输出时立即开始输出实体。或者,如果您可以在 Task 中执行类似操作,则使用Task.WhenAny
.
需要明确的是:5 个查询中的任何一个都可能需要 5000 毫秒。
c# - 如何等待 IAsyncEnumerable 的结果>,具有特定的并发级别
我有一个异步任务流,它是通过将异步 lambda 应用于项目流而生成的:
方法AsyncEnumerable.Range
及Select
以上是从System.Linq.Async
包中提供的。
我想要的结果是一个结果流,表示为IAsyncEnumerable<string>
. 结果必须按照与原始任务相同的顺序进行流式传输。此外,必须限制流的枚举,因此在任何给定时间都不能超过指定数量的任务处于活动状态。
我想要一个类型的扩展方法形式的解决方案IAsyncEnumerable<Task<T>>
,以便我可以多次链接它并形成一个处理管道,在功能上与TPL Dataflow管道相似,但表达流畅。以下是理想扩展方法的签名:
也接受CancellationToken
as 参数将是一个不错的功能。
更新:为了完整起见,我提供了一个通过链接两次AwaitResults
方法形成的流畅处理管道的示例。此管道以 PLINQ 块开始,只是为了证明混合 PLINQ 和 Linq.Async 是可能的。
预期输出:
结果:1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20
注意:回想起来,AwaitResults
方法可能应该命名为Merge
,而concurrencyLevel
参数应该命名为maxConcurrent
,因为它的功能类似于Rx库Merge
中存在的运算符。System.Interactive.Async包确实包含一个名为 s 的运算符,但它的所有重载都不会对源进行操作。它在和来源上运作。还可以添加一个参数,以便明确控制等待/合并操作所需的缓冲区大小。Merge
IAsyncEnumerable<T>
IAsyncEnumerable<Task<T>>
IEnumerable<IAsyncEnumerable<TSource>>
IAsyncEnumerable<IAsyncEnumerable<TSource>>
bufferCapacity
c# - 如何聚合 IAsyncEnumerable 的结果
我想问是否有计划或存在一种方法来汇总一个或多个收益IAsyncEnumerable
?那么鉴于以下方法,为什么没有简洁的方法来汇总其结果?
当前情景
所需场景
我想聚合IAsyncEnumerable
给定自定义聚合的结果Func
PS我不喜欢(在第一种情况下)我必须添加一个额外的局部变量accum
来收集可枚举的结果。我错过了什么吗,是否有一些我不知道的语法糖?
c# - 如何与异步 foreach 和 IAsyncEnumerable 一起返回 ActionResult
我有这个签名的控制器方法:
它工作正常,但我需要做一些请求验证并相应地返回 401、400 和其他代码,它不支持。或者,以下签名无法编译:
错误:
无法将类型“Microsoft.AspNetCore.Mvc.UnauthorizedResult”隐式转换为“MyApi.Responses.MyDto”
完整的方法:
有任何想法吗?似乎无法相信微软已经设计IAsyncEnumerable
为在没有返回其他任何东西的可能性/灵活性的情况下使用。
c# - 不可能两次运行 IAsyncEnumerable 的枚举?
IAsyncEnumerable
不可能运行两次枚举?
一旦CountAsync
运行,await foreach
将不会枚举任何项目。为什么?似乎没有重置方法AsyncEnumerator
。
数据来源: