task-parallel-library相关内容

为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要这么长时间才能取消任务

在编写从服务器并行下载图像的类时(使用由DataFlow TPL库支持的消费者/生产者模式),使用ActionBlock和Flurl.Http工具方法DownloadFileAsync,我已经意识到取消操作需要很长时间。由于所有下载操作都共享一个CancellationToken,我预计所有任务都会立即(或几乎)取消。实际上,如果我产生大量并行下载,取消所有任务/线程可能需要几分钟时间。我已经解决 ..

在单独的线程池中执行某些后台任务,以避免对主线程中执行的关键任务造成饥饿

在单独的线程池中执行某些后台任务(不是线程),以避免对主线程中执行的关键任务(不是线程)造成饥饿 我们的方案 我们托管了一个大容量WCF Web服务,其逻辑代码如下: void WcfApiMethod() { // logic // invoke other tasks which are critical var mainTask = Task.Facto ..
发布时间:2022-03-16 14:31:25 C#/.NET

使用TPL数据流对持续时间或阈值进行批处理

我已经使用TPL数据流实现了生产者..消费者模式。用例是代码从Kafka总线读取消息。为提高效率,我们需要在进入数据库时批量处理消息。 TPL数据流中是否有办法在达到大小或持续时间阈值时保留消息并触发? 例如,一旦消息从队列中拉出,当前实现将发布该消息。 postedSuccessfully = targetBuffer.Post(msg.Value); 推荐答案 ..
发布时间:2022-03-16 14:25:39 C#/.NET

异步等待某些任务完成(Task.WhenSome)

我正在编写一个服务,它结合来自各种互联网来源的数据,并在飞翔上生成响应。速度比完整性更重要,因此我希望在部分(不是所有)互联网资源响应后立即生成我的响应。通常,我的服务会创建10个并发Web请求,并且应该在其中5个请求完成后停止等待并开始处理。NET Framework和我所知道的任何第三方库都没有提供此功能,因此我可能不得不自己编写它。我尝试实现的方法具有以下签名: public stat ..
发布时间:2022-02-28 10:24:34 C#/.NET

正在并行更新同一对象的不同属性。调用是线程安全的吗?

我正在使用一个包含复杂属性的类。这些属性中的每一个都是通过不同的方法计算的。我使用Parallel.Invoke更新同一对象的不同属性。这是否会对对象造成任何问题? // sample class definition. I've simplified the example by using 'object' type // for complex types. public class ..

如何在 ASP.NET Web API 中使用非线程安全的 async/await API 和模式?

此问题已由 EF Data Context - Async/Await &多线程.我已经回答了这个问题,但没有提供任何最终解决方案. 最初的问题是那里有很多有用的 .NET API(例如 Microsoft Entity Framework 的 DbContext),它提供设计用于与 await 一起使用的异步方法,但它们被记录为不是线程安全的.这使得它们非常适合在桌面 UI 应用程序中使用 ..
发布时间:2022-01-31 11:19:39 C#/.NET

如何使 SqlDataReader.ReadAsync() 异步运行?

当调用实际执行需要时间的事情的 SQL Server 时,SqlDataReader.ReadAsync() 为我同步运行.有什么方法可以强制它异步运行还是我唯一的选择是在 Task.Run() 中调用它? 这是一个复制品.它使用 winforms 来证明调用阻塞了 GUI 线程.请注意,T-SQL 必须实际执行某些操作——这无法通过 WAITFOR DELAY '00:00:20' 重现. ..
发布时间:2022-01-23 22:07:39 C#/.NET

有没有办法将任务并行库(TPL)与 SQLDataReader 一起使用?

我喜欢 TPL 中 Parallel.For 和 Parallel.ForEach 扩展方法的简单性.我想知道是否有办法利用类似的东西,甚至是稍微高级一点的任务. 下面是 SqlDataReader 的典型用法,我想知道这是否可行,如果可行,如何用 TPL 中的内容替换下面的 while 循环.因为读者不能提供固定数量的迭代,所以 For 扩展方法是不可能的,这让我不得不处理我收集的任务.我 ..
发布时间:2022-01-23 21:49:17 C#/.NET

使用等待时 Monitor.Exit 上的 SynchronizationLockException

我正在创建一段代码,用于从我们拥有的旧系统中获取网页.为了避免过度查询,我将获取到的 URL 缓存起来.我正在使用 Monitor.Enter、Monitor.Exit 并仔细检查以避免发出两次请求,但是在使用 Monitor.Exit,我得到了这个异常: System.Threading.SynchronizationLockException 被捕获H结果=-2146233064Messag ..

TPL 队列处理

我目前正在做一个项目,我需要排队处理一些工作,这是要求: 必须一次处理一个作业 必须能够等待排队的项目 所以我想要类似的东西: 任务QueueJob(此处为参数){///将作业排队并以某种方式返回一个可等待的任务,该任务将等待队列中的作业执行完毕并返回结果.} 我尝试过一个后台运行任务,它只是将项目从队列中拉出并处理作业,但困难在于从后台任务到方法. 如果需要,我可 ..
发布时间:2022-01-21 11:59:57 C#/.NET

如何(以及是否)使用 TPL 编写单消费者队列?

我最近听到了很多关于 .NET 4.0 中的 TPL 的播客.他们中的大多数都描述了下载图像或进行计算等后台活动,使用任务以使工作不会干扰 GUI 线程. 我处理的大部分代码都具有多生产者/单一消费者的风格,其中来自多个来源的工作项必须排队,然后按顺序处理.一个示例是日志记录,其中来自多个线程的日志行按顺序排列到单个队列中,以最终写入文件或数据库.来自任何单一来源的所有记录都必须保持有序,并 ..
发布时间:2022-01-21 11:50:16 C#/.NET

线程安全的实体框架 6

刚刚开始测试 EF6 及其异步功能.当我意识到它们不是线程安全的时,我很惊讶.我有点假设这就是重点. 多年来,我已经拥有自己的基于 Task 的扩展方法,但我一直在等待 EF 让它们成为线程安全的. 至少我的基于任务的功能 locked 不会相互干扰.EF6 甚至没有走那么远.但主要问题是我的代码与他们的代码共享.即尝试发出异步查询,然后在它完成之前尝试访问触发延迟加载的导航属性(在同 ..

VS 2012 RC 中引用 TPL 数据流和 TPL 的问题

我刚刚将 Visual Studio 11 Beta 升级到新的 Visual Studio 2012 RC,但在引用 TPL 数据流时遇到了问题. 首先,我尝试像以前一样通过从框架中添加引用来引用 Dataflow.但是当我尝试这样做时,我得到一个错误框: 无法添加对“System.Threading.Tasks.Dataflow"的引用. 然后整个 Visual Studio ..

任务和垃圾收集存在哪些问题?

在使用派生自任务并行库的 API 和类时,开发人员何时需要关注垃圾回收的影响? .NET 任务实例能否超出范围在运行期间?,似乎会给您一种安全感,您不必担心将任务保持在范围内.但是,问题似乎仅限于在 ThreadPool 上运行的任务,然后它们由 ThreadPool root.但是,如果我理解 这篇 MSDN 博文正确地,来自该 SO 问题的建议并不普遍适用,因为来自 TaskComple ..
发布时间:2022-01-16 10:04:07 C#/.NET

.NET Task 实例可以在运行期间超出范围吗?

如果我在方法中有以下代码块(使用 .NET 4 和任务并行库): var task = new Task(() => DoSomethingLongRunning());任务.开始(); 然后方法返回,该任务会超出范围并被垃圾收集,还是会运行完成?我没有注意到 GCing 有任何问题,但我想确保我没有为 GC 设置竞争条件. 解决方案 更新: 在我回答了这个问题之后(很久以前!) ..
发布时间:2022-01-16 09:38:02 C#/.NET

.NET 4 任务并行库可以使用 COM 对象吗?

这是一个“这可能吗?如果可以,你能给我一个简单的例子吗,因为我在网上找不到一个?"类似的问题. 我有许多完全独立的(即“令人尴尬的并行")进程,我想使用 .NET Framework 4 中的 Task Parallel 库使用 C# 并行运行这些进程.其中一些过程需要使用可通过 COM/OLE 自动化访问的软件. 具体来说,有一个 Parallel.Foreach() 循环从项目列表 ..
发布时间:2022-01-14 12:00:09 C#/.NET