task-parallel-library相关内容
我很高兴在 .Net 4.0 中看到新的 System.Collections.Concurrent 命名空间,非常好!我见过 ConcurrentDictionary、ConcurrentQueue、ConcurrentStack、ConcurrentBag 和 BlockingCollection. 似乎神秘地缺少的一件事是ConcurrentList.我是否必须自己写(或从网上下载 :
..
我有一个任务列表,我想等待.我在等 await TaskEx.WhenAll(MyViewModel.GetListOfTasks().ToArray()); MyViewModel.GetListOfTasks() 返回任务列表: var tasksList = new List();foreach(项目中的变量项目){tasksList.Add(item.MyTask());} 现
..
以下代码解释了我的问题.我知道该列表不是线程安全的.但这背后的“真实"原因是什么? 类程序{静态无效主(字符串 [] args){列表strCol = new List();for (int i = 0; i {添加元素(strCol);}).ContinueWith((t) => { WriteCount(strCol, id.ToString()); });}Console.ReadLin
..
当两个转换块完成时,我如何重写代码完成的代码?我认为完成意味着它被标记为完成并且“输出队列"为空? 公共测试(){BroadCastBlock = new BroadcastBlock(i =>{返回我;});transformBlock1 = new TransformBlock(i =>{Console.WriteLine("1 个输入计数:" + transformBlock1.Input
..
当我在我的程序中使用 Parallel.ForEach 时,我发现有些线程似乎永远不会完成.事实上,它不断地产生新的线程,这是我没想到也绝对不想要的行为. 我能够使用以下代码重现此行为,就像我的“真实"程序一样,都大量使用处理器和内存(.NET 4.0 代码): 公共类节点{公共节点上一个{得到;私人订制;}公共节点(上一个节点){上一个 = 上一个;}}公开课计划{public stat
..
我对通过 Post() 或 SendAsync() 发送项目之间的区别感到困惑.我的理解是,在所有情况下,一旦项目到达数据块的输入缓冲区,控制权就会返回到调用上下文,对吗?那我为什么需要 SendAsync 呢?如果我的假设不正确,那么我想知道相反,如果使用数据块的整个想法是建立并发和异步环境,为什么有人会使用 Post(). 我当然理解技术上的区别在于 Post() 返回一个 bool 而
..
假设我有几个任务: void Sample(IEnumerable someInts){var taskList = someInts.Select(x => DownloadSomeString(x));}异步任务DownloadSomeString(int x) {...} 我想获得第一个成功任务的结果.因此,基本的解决方案是编写如下内容: var taskList = someInts
..
我原来的方法是这样的: string DoSomeWork(); Method DoSomeWork 在另一个线程上开始一些工作并返回执行 ID(只是随机字符串).稍后我可以通过返回的执行 ID 查询结果.要点是在作业完成之前使执行 ID 可用. 现在我想把签名改成返回Task,这样用户就可以等他了. Task DoSomeWork(); 同时我仍然需要返回执行 ID(例如用于跟踪目
..
我有一种方法可以向我们的客户发送一些短信,如下所示: public void ProcessSmsQueue(){SmsDbContext context = new SmsDbContext();ISmsProvider provider = new ZenviaProvider();SmsManager manager = new SmsManager(context, provider);
..
我很困惑.一个或多个 Task 如何在单个线程上并行运行?我对并行性的理解显然是错误的. 我无法理解的 MSDN 部分: async 和 await 关键字不会导致额外的线程创建.异步方法不需要多线程,因为异步方法不在自己的线程上运行.该方法在当前运行同步上下文并仅在线程上使用时间方法处于活动状态. .. 和: 在开始任务和等待任务之间,您可以开始其他任务.附加任务隐式并行
..
我看不出 C#(和 VB)的新异步功能与 .NET 4.0 的 任务并行库.例如,Eric Lippert 的代码 从这里: async void ArchiveDocuments(List urls) {任务存档=空;for(int i = 0; i
..
在我的应用程序中,我正在创建一些并发 Web 请求,并且当其中任何一个请求完成时我感到满意,因此我使用了方法 Task.WhenAny: var urls = new string[] {"https://stackoverflow.com","https://superuser.com","https://www.reddit.com/r/chess",};var 任务 = urls.Sele
..
请注意以下简单代码: class 程序{静态无效主(){var sw = 新秒表();sw.开始();尝试{Task.WhenAny(RunAsync()).GetAwaiter().GetResult();}捕获(超时异常){Console.WriteLine("超时");}Console.WriteLine("Elapsed:" + sw.Elapsed);Console.WriteLine
..
给定一个取消令牌,我想从中创建一个可等待的任务,该任务永远不会完成但可以取消.我需要这样的模式,IMO 应该很常见: async Task DoStuff(Task t, CancellationToken ct){//t 是从 TaskCompletionSource 生成的,//t 和 ct 都超出我的控制范围任务 t2 = TaskFromCancellationToken(ct);等待
..
我很难找到一个任务调度程序,我可以在上面安排优先任务,但也可以处理“打包"任务.这类似于 Task.Run 试图解决的问题,但您无法为 Task.Run 指定任务调度程序.我一直在使用 Parallel Extensions Extras Samples 中的 QueuedTaskScheduler 来解决任务优先级要求(此帖子也提出了建议). 这是我的例子: class 程序{私有静态
..
这是一个简单的 WinForms 应用程序: 使用系统;使用 System.Diagnostics;使用 System.Threading;使用 System.Threading.Tasks;使用 System.Windows.Forms;命名空间 WindowsFormsApplication{公共部分类 Form1 :表单{公共 Form1(){初始化组件();}private async
..
我使用控制台应用程序作为概念证明和获取异步返回值的新需求. 我发现我需要在主方法中使用 Task.WaitAll() 以避免需要异步“main()"方法,这是非法的. 我现在一直在试图找出一个允许我使用泛型的重载,或者只返回一个我可以转换的对象,但是在 Main() 中. 解决方案 您没有从 Task.WaitAll 获得返回值.你只用它来等待多个任务完成,然后从任务本身获取返
..
我正在尝试使用 C# 8,一种似乎特别有用的方法是 Task.WhenAll 返回 IAsyncEnumerable.此方法应在任务结果可用时立即流式传输任务结果,因此将其命名为 WhenAll 没有多大意义.WhenEach 听起来更合适.该方法的签名是: public static IAsyncEnumerableWhenEach(Task[] 个任务); 这个方法可以这样使用: var
..
通常我不会发布带有答案的问题,但这次我想吸引一些人注意我认为可能是一个晦涩但常见的问题.它是由这个问题触发的,从那时起我查看了自己的旧代码,发现其中一些也受此影响. 下面的代码启动并等待两个任务,task1 和 task2,它们几乎相同.task1 与 task2 的唯一区别在于它运行一个永无止境的循环.IMO,对于某些执行 CPU 密集型工作的现实场景,这两种情况都非常典型. 使用系统;
..
我有一个界面 接口 IFoo{任务CreateBarAsync();} 创建Bar有两种方法,一种是异步的,一种是同步的.我想为这两种方法中的每一种提供一个接口实现. 对于异步方法,实现可能如下所示: class Foo1 : IFoo{异步任务CreateBarAsync(){返回等待 AsynchronousBarCreatorAsync();}} 但是我应该如何实现使用同步方法
..