task-parallel-library 相关问题

自.NET 4以来,任务并行库是.NET Framework的一部分。它是一组API,使开发人员能够对异步应用程序进行编程。

我该如何做与TaskCompletionSource<nothing>等效的事情?

我想要一个类似 EventWaitHandle 的任务,我在一端等待它,然后将其设置为在另一端完成。 TaskCompletionSource 几乎是我想要的,但它需要我传递一个

回答 2 投票 0

我在“任务不起作用并且发生竞争条件”中使用了“锁定”

我在“任务”中使用了“锁定”,它不起作用并且发生了竞争条件 我定义了一个 Counter,它最终应该返回 0,因为 Method 会增加 C 的值...

回答 1 投票 0

Parallel.ForEach 与 ActionBlock

对于给定的 MaxDegreeOfParallelism 和需要处理的固定数量的对象(即在它们上执行某些代码),Parallel.ForEach 和 ActionBlock 似乎是相同的

回答 1 投票 0

有1个线程同时执行多个方法

所以我有一个包含 900 多个 C# 条目的列表。对于列表中的每个条目,都必须执行一个方法,尽管这些方法必须同时执行。首先我想到这样做: 公共无效初始化T...

回答 2 投票 0

在 UI 线程上创建并启动任务

当在工作线程上调用的方法需要在 UI 线程上运行代码并等待其完成后再执行其他操作时,可以这样做: 公共 int RunOnUi(Func&...

回答 1 投票 0

在异步中包装任务并设置超时?

我想在后台线程中运行一个函数,然后在异步上下文中超时使用结果。 这是我的代码: 打开系统.线程.任务 让永远() = 虽然是真的 ...

回答 1 投票 0

从 API 获取数据时,C# Parallel.ForEach 循环中的员工详细信息变为 null

我在 C# 中使用并行 foreach 循环从 API 获取员工详细信息时遇到了问题。请注意,我已使用并发包来执行任务,以使其线程安全并添加它......

回答 1 投票 0

Task.ContinueWith 之后计时器未再次启用

我有一个工作计时器,它每分钟检查是否有事情要做。如果有事情要做,计时器停止,任务开始(startTimer),这主要需要几分钟,然后...

回答 1 投票 0

在C# asp.net实体框架中创建多个数据库连接以并行方式获取数据

我有一个场景,我必须从数据库中获取 18000 条记录,并将其转换为 DTO。 refId 总数 = 数据库中引用表的 18000 个唯一 ID。 int 批量大小 = 1000;...

回答 1 投票 0

为什么Task内部需要使用ManualResetEventSlim?

根据Task的源码https://source.dot.net/#System.Private.CoreLib/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs,1483 所以任务使用 ManualResetEventSlim ke...

回答 1 投票 0

简单的连续并行任务

我已经读了2个小时了,但我仍然很困惑。有人说使用StartNew,有人说Task.Run,有人说别的。我确实知道 Task.Run 给了我一个编译错误。 我需要开始

回答 2 投票 0

后台工作线程中的阻塞收集不会运行未等待的任务

我有一个消费者,一个使用与此类似的 BlockingCollection 的自定义后台工作者 公共类 PCQueue:IDisposable { BlockingCollection _taskQ = 新的 BlockingCollection 我有一个消费者,一个自定义后台工作人员,使用 BlockingCollection 类似于 this public class PCQueue : IDisposable { BlockingCollection<Action> _taskQ = new BlockingCollection<Action>(); public PCQueue () { Task.Factory.StartNew (Consume); } public void Dispose() { _taskQ.CompleteAdding(); } public TaskCompletionSource<t> EnqueueTask<T>(Func<T> action) { var completion = new TaskCompletionSource<T>(); _taskQ.Add (() => completion.TrySetResult(action())); return completion; // Perhaps task needs to be returned here } void Consume() { foreach (Action action in _taskQ.GetConsumingEnumerable()) action(); } } 问题在于,如果不等待任务,则阻塞收集不会继续执行队列中的下一个任务。换句话说,“即发即忘”功能不起作用。在下面的代码中,第二个调用被困在队列中,直到等待下一个调用。 public static async Task Main() { // This will print "Start" var originalScheduler = InstanceService<ScheduleService>.Instance; await originalScheduler.Send(() => Console.WriteLine("Start")).Task; // If not awaited, this will not print anything originalScheduler.Send(() => Console.WriteLine("Continue")); // This will print the last two messages, "Continue" and "Complete" await originalScheduler.Send(() => Console.WriteLine("Complete")).Task; } 问题 现在工作人员允许等待排队的任务或取消工作。如何确保即使没有等待,任务也会以“即发即忘”的方式执行? 对于可能关注的人,更新了实施。 问题似乎是TaskCreationSource永远不会完成,因此当执行这些命令时,任务队列将陷入等待第一个任务的状态。 var s = InstanceService<ScheduleService>.Instance; await s.Send(() => Console.WriteLine("Start")).Task; // 1st task starts but doesn't complete s.Send(() => Console.WriteLine("Continue")); // await s.Send(() => Console.WriteLine("Complete")).Task; // This completes the 1st task 解决方案是使用选项 TaskCompletionSource 创建 TaskCreationOptions.RunContinuationsAsynchronously,因此原来安排工作的方法将更改为此。 TaskCompletionSource<T> EnqueueTask<T>(Func<T> action) { var options = TaskCreationOptions.RunContinuationsAsynchronously; var completion = new TaskCompletionSource<T>(options); _taskQ.Add (() => completion.TrySetResult(action())); return completion; // completion.Task.Start() is not needed }

回答 1 投票 0

Thread.Sleep() 与 Task.Delay().Wait()

异步方法中的代码库是这样的: 线程.睡眠(500); 一位同事将其重构为这样: 任务.延迟(500).等待(); 鉴于相对较小的延迟,使用...

回答 1 投票 0

如何使用Task通过计数器运行BackgroundService?

我的 dot net core 应用程序中有一个后台服务。这将通过容量计数器运行。 公共类 WebWorkGenerator :BackgroundService { 私有 const int ConsumeCapacityPerMinute = 1...

回答 1 投票 0

将 CancellationToken 与异步方法的任务相关联

问题:有没有办法将 CancellationToken 与从异步方法返回的任务关联起来? 一般来说,如果抛出OperationCancelledException,任务将最终处于取消状态...

回答 2 投票 0

异步延续的取消确认如何工作?

Task.IsCanceled 的文档指定OperationCanceledException.CancellationToken 必须与用于启动任务的取消标记匹配才能正确确认。我和...

回答 1 投票 0

如何从IObservable中拉取

假设端点A有一个Subject,端点B有一个IObservable。 端点 A 使用 OnNext() 发送 T 的一个对象,并且从不调用 OnComplete()。我没有缺点...

回答 2 投票 0

使用预定义对象减少 Task.Run/Factory.StartNew 中的闭包开销

这纯粹是为了实验目的和/或学习练习。本质上,我想看看是否可以减少使用 Task.Run(()=>Func<>()) 时创建的闭包的占用空间

回答 2 投票 0

HttpClient - 任务被取消?

当有一个或两个任务时它工作正常,但是当我们列出多个任务时会抛出错误“任务被取消”。 列表 allTasks = new 列表(); allTasks.Add(......

回答 9 投票 0

Task.WhenAny

假设task1、task2、task3是我在函数开头启动的任务,那么什么是 等待任务.WhenAny(任务1,任务2,任务3);如果在代码到达 t 之前完成了多个任务,则返回...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.