task-parallel-library 相关问题

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

如何使用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

将 TryDequeue 放入 while 循环中安全吗?

我之前没有使用过并发队列。 在 while 循环中使用 TryDequeue 是否可以?难道这事就不能永远陷下去了吗? var cq = new ConcurrentQueue(); cq.Enqueue(“测试”);

回答 2 投票 0

为什么任务的状态是“故障”而不是“已取消”?

我正在尝试不同的取消方式。在这里您将看到 5 种不同的方法,前四种方法是毫无疑问的。 (这些已评论,但保留以避免讨论

回答 1 投票 0

TPL ActionBlock 在异常后不处理消息

我已经设置了一个动作块,如下所示: 私有只读 ActionBlock _actionBlock; ... _actionBlock = 新的 ActionBlock 我已经设置了一个动作块,如下所示: private readonly ActionBlock<PresentationListNotification> _actionBlock; ... _actionBlock = new ActionBlock<PresentationListNotification>(HandleNotification); 每次我希望调用操作块时,我都会这样做: try { _actionBlock.Post(notification); } catch (AggregateException aggException) { foreach (Exception ex in aggException.InnerExceptions) { _logger.LogError(ex,"Exception {Message} occurred processing notification", ex.Message); } } 这一切都工作正常,但我注意到当 HandleNotification 委托中发生异常时(实际实现可能并不重要,但当我尝试在处于错误状态的 TaskCompletionSource 上设置结果时发生) ,操作块将无法将后续消息发布到我的处理程序。在调试器中,我可以看到 IsCompleted 和 IsDecliningPermanently 属性为 True。当动作块处于这种状态时我如何恢复? 作为 TPL Dataflow 的粉丝,我选择了以下设计模式,除非您对发生未处理的异常时整个块停止处理消息的默认行为感到满意。 处理创建块的委托中的所有异常。 将输入和/或输出包装在一个状态对象中,该对象不仅传达实际的输入消息和/或输出消息,而且还传达操作是否成功并捕获异常消息(如果不成功)(很像 Task<T> 捕获结果或例外)。 要么: a)管道中的每个块都会检查先前的操作是否成功,然后传递错误或继续其快乐路径操作。 b) 或者每个块使用传播扩展连接到下一个块,并使用过滤器子句将失败的消息发送到独立队列或块以进行错误处理/记录。 如果是“a”,则在管道末尾有一个带有过滤器的传播子句,该过滤器将最终状态对象传递到错误块或成功块,并执行任何必要的最终步骤。

回答 1 投票 0

“调用线程必须是 STA”解决方法

我知道关于这个主题有一些答案,但我无法得到任何适合我的解决方案。我正在尝试从数据模板内触发的 ICommand 打开一个新窗口。两者都...

回答 3 投票 0

忽略ContinueWith中的任务异常

我想抑制任务中触发的异常。我记得,不久前我使用了这段代码来实现这一点: 无效主(..) { 任务失败() { 抛出新的异常(“前”...

回答 1 投票 0

并行处理 ZipArchive 条目

我需要将 ZipArchive 条目作为字符串处理。目前我有这样的代码: 使用 (ZipArchive archive = ZipFile.OpenRead(zipFileName)) { foreach(archive.Entries 中的 ZipArchiveEntry 条目...

回答 1 投票 0

为什么 AggregateException 的 catch 块不足以处理取消?

运行以下代码: 使用静态 System.Console; WriteLine("处理取消和异常。"); CancellationTokenSource cts = new(); CancellationToken 令牌 = cts.Token; 变种

回答 1 投票 0

如何在 ASP.NET 中并行运行多个方法

我在 ASP.NET 控制台应用程序中有 8 个方法,例如 Fun1()、Fun2()、Fun3() ...等等。在我的控制台应用程序中,我按顺序调用了所有这些方法。但现在的要求是我必须做

回答 2 投票 0

需要了解SemaphoreSlim的用法

这是我的代码,但我不明白 SemaphoreSlim 在做什么。 异步任务 WorkerMainAsync() { SemaphoreSlim ss = 新 SemaphoreSlim(10); 列表 trackedTasks = 新列表...

回答 4 投票 0

SynchronizationContext,什么时候流动,什么时候不流动?

我正在尝试了解 SynchronizationContext 和朋友。 如果我在例如开始时设置自定义同步上下文一个控制台应用程序。 电流同步在什么条件下会...

回答 1 投票 0

在任务上设置 ApartmentState

我正在尝试设置任务的公寓状态,但没有看到执行此操作的选项。有没有办法使用任务来做到这一点? 对于 (int i = 0; i < zom.Count; i++) { Task t = Task.Factory.StartN...

回答 5 投票 0

可等待的自动重置事件

AutoResetEvent 的异步(可等待)等价物是什么? 如果在经典的线程同步中我们会使用这样的东西: AutoResetEvent 信号 = new AutoResetEvent(false);...

回答 11 投票 0

Task.Run 和 Task.Factory.StartNew 之间的异常处理不同

我在使用Task.Factory.StartNew并尝试捕获引发的异常时遇到了问题。在我的应用程序中,我有一个长时间运行的任务,我想将其封装在 Task.Fac 中...

回答 3 投票 0

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