task-parallel-library相关内容

多个线程向一个列表添加元素.为什么列表中的项目总是比预期的少?

以下代码解释了我的问题.我知道该列表不是线程安全的.但这背后的“真实"原因是什么? 类程序{静态无效主(字符串 [] args){列表strCol = new List();for (int i = 0; i {添加元素(strCol);}).ContinueWith((t) => { WriteCount(strCol, id.ToString()); });}Console.ReadLin ..

Parallel.ForEach 不断产生新线程

当我在我的程序中使用 Parallel.ForEach 时,我发现有些线程似乎永远不会完成.事实上,它不断地产生新的线程,这是我没想到也绝对不想要的行为. 我能够使用以下代码重现此行为,就像我的“真实"程序一样,都大量使用处理器和内存(.NET 4.0 代码): 公共类节点{公共节点上一个{得到;私人订制;}公共节点(上一个节点){上一个 = 上一个;}}公开课计划{public stat ..

TPL Dataflow,Post() 和 SendAsync() 之间的功能区别是什么?

我对通过 Post() 或 SendAsync() 发送项目之间的区别感到困惑.我的理解是,在所有情况下,一旦项目到达数据块的输入缓冲区,控制权就会返回到调用上下文,对吗?那我为什么需要 SendAsync 呢?如果我的假设不正确,那么我想知道相反,如果使用数据块的整个想法是建立并发和异步环境,为什么有人会使用 Post(). 我当然理解技术上的区别在于 Post() 返回一个 bool 而 ..

是否可以从 TPL Task 派生以从方法返回更多详细信息?

我原来的方法是这样的: string DoSomeWork(); Method DoSomeWork 在另一个线程上开始一些工作并返回执行 ID(只是随机字符串).稍后我可以通过返回的执行 ID 查询结果.要点是在作业完成之前使执行 ID 可用. 现在我想把签名改成返回Task,这样用户就可以等他了. Task DoSomeWork(); 同时我仍然需要返回执行 ID(例如用于跟踪目 ..
发布时间:2021-12-27 23:50:07 C#/.NET

async 和 await 关键字不会导致创建额外的线程?

我很困惑.一个或多个 Task 如何在单个线程上并行运行?我对并行性的理解显然是错误的. 我无法理解的 MSDN 部分: async 和 await 关键字不会导致额外的线程创建.异步方法不需要多线程,因为异步方法不在自己的线程上运行.该方法在当前运行同步上下文并仅在线程上使用时间方法处于活动状态. .. 和: 在开始任务和等待任务之间,您可以开始其他任务.附加任务隐式并行 ..

来自取消令牌的任务?

给定一个取消令牌,我想从中创建一个可等待的任务,该任务永远不会完成但可以取消.我需要这样的模式,IMO 应该很常见: async Task DoStuff(Task t, CancellationToken ct){//t 是从 TaskCompletionSource 生成的,//t 和 ct 都超出我的控制范围任务 t2 = TaskFromCancellationToken(ct);等待 ..
发布时间:2021-12-27 23:40:29 C#/.NET

处理包装任务的有限并发级别任务调度程序(具有任务优先级)

我很难找到一个任务调度程序,我可以在上面安排优先任务,但也可以处理“打包"任务.这类似于 Task.Run 试图解决的问题,但您无法为 Task.Run 指定任务调度程序.我一直在使用 Parallel Extensions Extras Samples 中的 QueuedTaskScheduler 来解决任务优先级要求(此帖子也提出了建议). 这是我的例子: class 程序{私有静态 ..
发布时间:2021-12-27 23:39:44 C#/.NET

了解 TaskScheduler.Current 的行为

这是一个简单的 WinForms 应用程序: 使用系统;使用 System.Diagnostics;使用 System.Threading;使用 System.Threading.Tasks;使用 System.Windows.Forms;命名空间 WindowsFormsApplication{公共部分类 Form1 :表单{公共 Form1(){初始化组件();}private async ..
发布时间:2021-12-27 23:37:30 C#/.NET

如何从控制台应用程序中的 Task.WaitAll() 获取返回值?

我使用控制台应用程序作为概念证明和获取异步返回值的新需求. 我发现我需要在主方法中使用 Task.WaitAll() 以避免需要异步“main()"方法,这是非法的. 我现在一直在试图找出一个允许我使用泛型的重载,或者只返回一个我可以转换的对象,但是在 Main() 中. 解决方案 您没有从 Task.WaitAll 获得返回值.你只用它来等待多个任务完成,然后从任务本身获取返 ..

如何实现一个高效的 WhenEach 来传输 IAsyncEnumerable 的任务结果?

我正在尝试使用 C# 8,一种似乎特别有用的方法是 Task.WhenAll 返回 IAsyncEnumerable.此方法应在任务结果可用时立即流式传输任务结果,因此将其命名为 WhenAll 没有多大意义.WhenEach 听起来更合适.该方法的签名是: public static IAsyncEnumerableWhenEach(Task[] 个任务); 这个方法可以这样使用: var ..
发布时间:2021-12-27 23:36:55 C#/.NET

CancellationToken.ThrowIfCancellationRequested 之后的故障与取消任务状态

通常我不会发布带有答案的问题,但这次我想吸引一些人注意我认为可能是一个晦涩但常见的问题.它是由这个问题触发的,从那时起我查看了自己的旧代码,发现其中一些也受此影响. 下面的代码启动并等待两个任务,task1 和 task2,它们几乎相同.task1 与 task2 的唯一区别在于它运行一个永无止境的循环.IMO,对于某些执行 CPU 密集型工作的现实场景,这两种情况都非常典型. 使用系统; ..
发布时间:2021-12-27 23:36:45 C#/.NET

如何实现返回Task的接口方法?

我有一个界面 接口 IFoo{任务CreateBarAsync();} 创建Bar有两种方法,一种是异步的,一种是同步的.我想为这两种方法中的每一种提供一个接口实现. 对于异步方法,实现可能如下所示: class Foo1 : IFoo{异步任务CreateBarAsync(){返回等待 AsynchronousBarCreatorAsync();}} 但是我应该如何实现使用同步方法 ..
发布时间:2021-12-27 23:36:36 C#/.NET