task-parallel-library 相关问题

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

任务与线程池

我有一个 C# 应用程序,其中包含要做的工作列表。我希望尽可能多地并行完成这些工作。但是我需要能够控制并行任务的最大数量。 来自

回答 4 投票 0

我可以在 Parallel.For Local Final 部分使用 Kahan 求和吗?

通过 Parallel.For 循环的向量乘法实现该矩阵后,我需要使用 Kahan Summation 对结果求和以减少数值误差。是否可以? 这是我的本地鳍...

回答 1 投票 0

在Task.Run中使用CancellationToken超时不起作用[重复]

好的,我的问题很简单。为什么这段代码不抛出TaskCancelledException? 静态无效Main() { var v = Task.Run(() => { 线程.睡眠(1000); 返回 10; ...

回答 4 投票 0

我需要处置任务吗?

我很享受使用 System.Threading.Tasks 的过程。然而,我看到的许多代码示例看起来都是这样的: Dim lcTask = Task.Factory.StartNew(Sub() DoSomeWork()) Dim lcTaskLong = 任务。

回答 1 投票 0

忽略在 Task.WhenAll 处抛出异常的任务并仅获取已完成的结果

我正在解决一个任务并行问题,我有很多任务可能会或可能不会抛出异常。 我想处理所有正确完成的任务并记录其余的任务。 Task.WhenAll 传播...

回答 3 投票 0

Mutex.TryOpenExisting() 是线程安全的吗?

我使用Mutex.TryOpenExisting()。我想知道线程安全吗? 公共类 MutexNamedSystemDemo { 私有 const string _mutexName = @"Global\{C7F2DE44-8927-4B01-B8E1-D8F158A483A8}"...

回答 1 投票 0

为什么在 C# 内联中使用任务和异步等待?

他们说任务很好,因为它们是非阻塞的。这就说得通了。一段时间以来,我们有了异步的一切——mvc 中的异步操作、异步 Web api 调用、异步 ef 方法等。 第一个...

回答 1 投票 0

我该如何做与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

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