标签:task-parallel-library
-
TransformBlock之后如何写入对象? - c#
我有一个需要迭代并行处理的对象的列表。这是我需要做的: foreach (var r in results) { r.SomeList = await apiHelper.Get(r.Id); } 由于我想对其进行parellelize,因此我尝试使用Parallel.ForEach(),但它没有等到所有事情都完成之后才开始使用apiHelper.Get() […]
-
如果Task.Wait尚未运行,它是否启动? - c#
根据我阅读的Microsoft TPL文档(link),调用Task.Wait()方法将阻塞当前线程,直到该任务完成(或取消或出现错误)。但它也表示,如果所讨论的任务尚未开始,则Wait方法将通过要求调度程序重新分配它来尝试在其自己的线程上运行它,从而减少了由于阻塞而造成的浪费。 我有一个系统,其中的任务(一旦运行)通过启动其他任务并等待其结果来收集数据而开 […]
-
任务计划程序:在Task.Factory.StartNew中等待时,线程是否返回到池中? - c#
我正在实现一个并发上限的辅助引擎。我正在使用信号灯,直到并发降至最大数量以下,然后使用Task.Factory.StartNew将异步处理程序包装在try / catch中,并使用finally释放信号灯。 我意识到这会在线程池上创建线程-但是我的问题是,当那些任务运行线程中的一个实际上正在等待时(在真正的IO调用或等待句柄上)时,线程是否返回池中,正如我希 […]
-
在ITargetBlock <TInput>中重试策略 - c#
我需要将重试策略引入工作流程。假设有3个块以这种方式连接: var executionOptions = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 3 }; var buffer = new BufferBlock<int>(); var processing = n […]
-
Task.IsCancelled不起作用 - c#
我有以下示例代码: static class Program { static void Main() { var cts = new CancellationTokenSource(); var task = Task.Factory.StartNew( () => { try { Console.WriteLine("Task: Runn […]
-
C#。如果“等待后”线程繁忙,会发生什么? - c#
等待任务完成但启动异步方法的线程不可用时,C#会发生什么(例如,处理另一个请求)?然后将使用另一个线程而不是第一个线程,或者执行将等到繁忙线程可用? 预先感谢您的回答。 参考方案 这取决于安排继续的线程的SynchronizationContext。 例如,当您在具有UI线程的应用程序(例如ASP.NET或WPF应用程序)中使用async/await时,在U […]
-
您可以强制Parallel.Invoke使用多个线程吗? - c#
我在.aspx页中使用像这样的任务并行库: Parallel.Invoke( new Action[] { () => { users= service.DoAbc(); }, () => { products= service.DoDef(); } }); 以前,我是在每次调用时触发一个线程,现在使用Parallel.Invoke时它的响应速度 […]
-
如何正确并行化工作人员任务? - c#
请考虑以下代码片段,并注意设置numberTasksToSpinOff等于1,然后等于3,4或更大(取决于计算机上的线程资源)之间的总运行时间差异。当完成更多任务时,我注意到运行时间更长。 我特意将数据收集传递到每个工作人员任务同时读取的每个工作人员实例中。我认为只要这些操作只是读取或枚举,任务就可以访问共享数据结构而不会阻塞。 我的目标是剥离多个任务,这些 […]
-
我该如何强制等待在同一线程上继续? - c#
await不保证对衍生任务继续执行同一任务: private void TestButton_Click(object sender, RoutedEventArgs e) { Task.Run(async () => { Debug.WriteLine("running on task " + Task.CurrentId); a […]
-
如何汇总多个任务结果 - c#
我在下面的代码片段中创建了2个任务,现在我想将两个任务的结果合并为一个变量: public class DataPoint { public int Id { get; set; } public string Data { get; set; } } public class Worker { public void DoProcessing() { Li […]