Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#中的异步等待导致列表/枚举的额外迭代

C#中的异步等待导致列表/枚举的额外迭代
EN

Stack Overflow用户
提问于 2017-02-14 01:56:05
回答 1查看 97关注 0票数 0

我在一个小的C# WPF应用程序中使用异步和等待,这样我就可以在后台运行长时间的处理操作时阻止gui被阻塞。我的应用程序的上下文是从CSV读取数据并将其转换为XML文档。

当我使用1999个条目的输入列表计数运行以下代码时,最终得到的迭代计数约为8000。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**** Main Thread ****
    outputItems = await CreateOutputItems(inputItems);
**** End Main Thread ****

public async Task<IEnumerable<ConvertedEntity>> CreateOutputItems(IEnumerable<InputEntity> inputItems)
    {
        return await Task.Run(() => inputItems.Select(CreateOutputItemFromInputItem));
    }

当我删除它并在主线程中将其作为过程循环运行时,我得到了正确的1999次迭代。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var convertedItems = new List<ConvertedEntity>();

foreach (var inputItem in inputItems)
{
      var outputItem = CreateOutputItemFromInputItem(inputItem);
      convertedItems.Add(outputItem);
}

另外,我注意到我的ConvertedEntity中包含ID号(仅仅是循环/迭代号)的字段在使用async await时被损坏。例如,值是2000,4000,6000到30,000,当我使用foreach循环时,它们是1,2,3,4,5等等。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-14 05:14:35

int输入参数添加到您的方法中,这样您就可以使用带有索引的Select版本,然后使用该索引i来正确设置ID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ConvertedEntity CreateOutputItemFromInputItem(InputEntity x, int i) 
{  
  // now use i to set the ID

还要在Select(CreateOutputItemFromInputItem)后面添加一个.ToList(),这样它就可以在Task.Run中执行它

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42216574

复制
相关文章
C#中的枚举器(译)
翻译文章,原文链接(已失效):http://www.ondotnet.com/pub/a/dotnet/2004/06/07/liberty.html
张子阳
2018/09/27
1.9K0
C#的“智能枚举”:在枚举中增加行为?
在这个示例中,我们定义了一个名为 Weekday 的枚举,其中包括每个星期的日子。然后在 Main 方法中,我们将 today 变量设置为 Tuesday,并使用 ToString() 方法将其转换为字符串。
郑子铭
2023/08/30
4100
C#的“智能枚举”:在枚举中增加行为?
C# 中的“智能枚举”:如何在枚举中增加行为
在这个示例中,我们定义了一个名为 Weekday 的枚举,其中包括每个星期的日子。然后在 Main 方法中,我们将 today 变量设置为 Tuesday,并使用 ToString() 方法将其转换为字符串。
郑子铭
2023/08/30
3350
C# 中的“智能枚举”:如何在枚举中增加行为
Node.js 中的异步迭代器
从 Node.js v10.0.0 开始,异步迭代器就出现中了,最近它们在社区中的吸引力越来越大。在本文中,我们将讨论异步迭代器的作用,还将解决它们可能用于什么目的的问题。
疯狂的技术宅
2020/05/11
1.7K0
Node.js 中的异步迭代器
等待多个异步任务的方法
Task.Wait(),这个是用来等待异步任务完成的一个方法,当我们有多个异步任务同时进行,需要等待所有异步任务完成或者等待某个异步任务完成的时候,就可以用WaitAll或WaitAny这两个方法,下面先看一段代码:
宿春磊Charles
2021/11/05
2.6K0
Node.js 中的异步生成器和异步迭代
生成器函数在 JavaScript 中的出现早于引入 async/await,这意味着在创建异步生成器(始终返回 Promise 且可以 await 的生成器)的同时,还引入了许多需要注意的事项。
疯狂的技术宅
2020/09/01
1.7K0
Node.js 中的异步生成器和异步迭代
.NET 中让 Task 支持带超时的异步等待
Task 自带有很多等待任务完成的方法,有的是实例方法,有的是静态方法。有的阻塞,有的不阻塞。不过带超时的方法只有一个,但它是阻塞的。
walterlv
2023/10/22
4040
.NET 中让 Task 支持带超时的异步等待
c# 枚举之间的转换
枚举在C#中都会用到,但是你是否想过,枚举之间怎么转换?这篇文章我就来说一下枚举之间的转换。 C# 是不支持不同枚举之间的转换的,但是 CLR 支持,因此我们可以利用 CLR 赋值的兼容性来实现枚举之间的转换。看一下代码你就明白了:
喵叔
2020/09/08
7550
C# 枚举在属性中运用
//默认ZFLText属性值为"Label"  [DefaultValue(typeof(DisplayMode), "Label")]  public DisplayMode ZFLText   {       get;       set;   } [Serializable]     public enum DisplayMode     {         /// <summary>         /// 显示文本         /// </summary>         Label,   
跟着阿笨一起玩NET
2018/09/18
2.3K0
C# 枚举在属性中运用
腾讯的VCode后台等待升级,导致卡死
VCode相对比较轻量级,也挺好用。可是不知道什么情况,一到VCode后台执行等待升级,系统界面就开始卡死,不知道是哪个同学的杰作?! 本来我也不知道是VCode搞的鬼,也没有绝对的证据,但是一次次的场景都指向VCode升级。
用户2401623
2021/12/17
5820
C#中的简单异步记录器
本文翻译自CodeProject上面的一篇博客A Simple Asynchronous Logger in C#
ccf19881030
2021/03/20
6670
C#:异步编程中的 async 和 await
async 和 await 在 C# 5.0 就已经引入了,用来处理异步编程,但之前用的相对较少,现在在 dotNet Core 时代,已经使用的非常普遍,很多的开源组件中提供了大量的后缀为 Async (异步)的方法。本文就简单讲讲 async 和 await。
oec2003
2020/11/19
2.6K0
C#:异步编程中的 async 和 await
探索异步迭代器在 Node.js 中的使用
上一节讲解了迭代器的使用,如果对迭代器还不够了解的可以在回顾下《从理解到实现轻松掌握 ES6 中的迭代器》,目前在 JavaScript 中还没有被默认设定 [Symbol.asyncIterator] 属性的内建对象,但是在 Node.js 中已有部分核心模块(Stream、Events)和一些第三方 NPM 模块(mongodb)已支持 Symbol.asyncIterator 属性。本文也是探索异步迭代器在 Node.js 中的都有哪些使用场景,欢迎留言探讨。
五月君
2020/12/14
7.6K0
探索异步迭代器在 Node.js 中的使用
【C#】带等待窗体的BackgroundWorker
---------------201504170911更新---------------
AhDung
2018/09/13
1.8K0
【C#】带等待窗体的BackgroundWorker
.NET 中什么样的类是可使用 await 异步等待的?
发布于 2018-12-22 19:52 更新于 2018-12-23 07:17
walterlv
2020/02/10
1.5K0
C#8.0宝藏好物Async streams
.NET诞生之初,就通过IEnumerable、IEnumerator提供迭代能力, 前者代表具备可枚举的性质,后者代表可被枚举的方式。 (看你骨骼惊奇,再送你一本《2021年了,IEnumerable、IEnumerator接口还傻傻分不清楚?》) 如果你真的使用强类型IEnumerable/IEnumerator来产生/消费可枚举类型,会发现要写很多琐碎代码。
有态度的马甲
2021/04/21
9750
C#8.0宝藏好物Async streams
golang:各种异步等待集合
golang中各种异步等待写法集合package waitimport ( "context" "errors" "math/rand" "sync" "time" "k8s.io/apimachinery/pkg/util/runtime")// For any test of the style:// ...// <- time.After(timeout):// t.Errorf("Timed out")// The value for timeo
IT工作者
2022/07/21
9100
枚举器与迭代器
这次我们再次来讲解一下开发人员会用但不理解的C#中的知识,这篇文章我们讲解一下枚举器与迭代器的知识。
喵叔
2020/09/08
4580
枚举器与迭代器
C#的Enum——枚举「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说C#的Enum——枚举「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/02/28
2.4K0
c#枚举的描述和值
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication15 { class Program { public static
用户1055830
2018/05/28
8730

相似问题

队列或等待列表中的C#异步任务

11

C# 5.0异步等待返回列表

20

反应中断异步测试中的额外等待

10

枚举在迭代时打印额外的行

118

了解C#中的异步/等待

578
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文