task-parallel-library相关内容

使用 TPL 如何设置最大线程池大小

我正在使用 TPL 使用函数 Task.Factory.StartNew() 向系统线程池添加新任务.唯一的问题是我添加了很多线程,我认为它为我的处理器创建了太多无法处理的线程.有没有办法设置这个线程池中的最大线程数? 解决方案 默认的 TaskScheduler(从 TaskScheduler.Default 获得)是类型(内部类)ThreadPoolTask​​Scheduler.此实 ..
发布时间:2021-12-25 08:28:20 其他开发

Task.WaitAll 不等待子任务?

您好,我将 _noOfThreads 作为定义的任务一次运行.所以我继续使用 % 操作符继续任务,在循环结束时我有 Tasks.WaitAll.这是代码片段. for (int index = 0; index { foo.bar(); },TaskContinuationOptions.AttachedToParent);}Task.WaitAll(tasks); 但是,我注意到它不会等待 ..
发布时间:2021-12-25 08:20:25 C#/.NET

当我不使用 TaskCreationOptions.LongRunning 时的奇怪行为

我有一个引擎,它有任意数量的轮询器,每个轮询器每隔几秒钟就进行一次“轮询".我希望轮询器在不同的线程中运行,但单个轮询器中的每个“轮询"应该是顺序的,以便一个在下一个之后发生.一切都在使用此代码启动轮询过程: public void StartPolling(){秒表 watch = new Stopwatch();while (Engine.IsRunning){任务 task = Task ..
发布时间:2021-12-25 08:20:17 C#/.NET

对于长时间运行的进程,最好手动执行线程而不是线程池,这是真的吗?

我前几天读到,对于长时间运行的任务,我最好的办法是手动创建线程,而不是使用 .NET 的线程池或任务并行.当我正在学习 c# 线程时,我真的很想有人启发我,特别是对于长时间运行的 IO 任务.提前致谢. 解决方案 确实如此.线程池针对小型工作单元进行了优化,您可以通过保留线程池线程来干扰其他工作. 我的经验法则是,如果一个操作可能需要超过一秒钟,它不应该在线程池线程上.那可能很长. ..
发布时间:2021-12-25 08:08:44 C#/.NET

TPL TaskFactory.FromAsync 与具有阻塞方法的任务

我想知道在方法的阻塞版本上使用 TPL TaskFactory.FromAsync 和使用 TaskFactory.StartNew 之间是否有任何性能影响.我正在编写一个支持不超过 100 个并发连接的 TCP 服务器.使用第一个选项编写代码后 &链接多个读&用 continue with 写操作,我留下了难看的、难以调试的代码. 我相信用同步版本编写代码 &然后用 Task 包装它会降低 ..

ThreadPool.QueueUserWorkItem 与 Task.Factory.StartNew

下面有什么区别 ThreadPool.QueueUserWorkItem 对比 Task.Factory.StartNew 如果对于某个长时间运行的任务,上面的代码被调用了 500 次,是否意味着所有的线程池线程都会被占用? 或者 TPL(第二个选项)是否足够聪明,只占用少于或等于处理器数量的线程? 解决方案 如果您要使用 TPL 开始一个长时间运行的任务,您应该指定 Tas ..
发布时间:2021-12-25 00:00:17 C#/.NET

何时处置 CancellationTokenSource?

CancellationTokenSource 类是一次性的.快速查看 Reflector 可以证明 KernelEvent 的使用,这是一种(很可能)非托管资源.由于CancellationTokenSource没有finalizer,如果我们不处理它,GC就不会处理. 另一方面,如果您查看 MSDN 文章中列出的示例 托管线程中的取消,只有一个代码片段处理令牌. 在代码中处理它的正 ..
发布时间:2021-12-24 23:55:22 C#/.NET

Task.Run 带参数?

我正在处理一个多任务网络项目,我是 Threading.Tasks 的新手.我实现了一个简单的 Task.Factory.StartNew(),我想知道如何使用 Task.Run() 来实现? 基本代码如下: Task.Factory.StartNew(new Action((x) =>{//用 'x' 做一些事情}), 原始数据); 我在对象浏览器中查看了System.Threadin ..
发布时间:2021-12-23 22:22:26 C#/.NET

WebAPI 中的长时间运行任务

这是我的问题:我需要在 ApiController 中调用多个第 3 方方法.这些方法的签名是Task DoSomethingAsync(SomeClass someData, SomeOtherClass moreData).我希望这些调用在 ApiController 将数据发送回客户端后继续在后台运行.当 DoSomethingAsync 完成时,我想做一些日志记录并可能将一些数据保存到文件 ..
发布时间:2021-12-20 12:46:29 其他开发

任务并行库与异步工作流

我有一些用 c# 编写的东西,可以执行并发代码,大量使用任务并行库(任务和未来延续链). 我现在将其移植到 F# 并试图找出使用 F# 异步工作流与 TPL 中的构造的优缺点.我倾向于 TPL,但我认为这两种方式都可以完成. 有没有人有关于用 F# 编写并发程序的技巧和智慧可以分享? 解决方案 这个名字几乎概括了区别:异步编程与并行编程.但在 F# 中,您可以混合搭配. ..
发布时间:2021-12-14 20:51:26 其他开发

编写自己的异步方法

我想知道如何以“正确"的方式编写自己的异步方法. 我看过很多像这样解释 async/await 模式的帖子: http://msdn.microsoft.com/en-us/library/hh191443.aspx //签名中需要注意的三件事://- 该方法有一个 async 修饰符.//- 返回类型是 Task 或 Task.(请参阅“返回类型"部分.)//这里是 Task因为 ..
发布时间:2021-12-14 20:50:42 C#/.NET

如何使用谓词实现 Task.WhenAny()

我想同时执行几个异步任务.每个任务都将运行一个 HTTP 请求,该请求可以成功完成也可以抛出异常.我需要 await 直到第一个任务成功完成,或者直到所有任务都失败. 如何实现 Task.WhenAny 接受谓词的方法,以便我可以排除未成功完成的任务? 解决方案 public static Task获取第一结果(ICollection>任务工厂,谓词谓词) 其中 T : 类{v ..
发布时间:2021-12-14 20:47:17 C#/.NET

HttpClient.SendAsync 使用线程池而不是异步 IO?

所以我一直在通过 Reflector 研究 HttpClient.SendAsync 的实现.我特意想了解的是这些方法的执行流程,并确定调用哪个 API 来执行异步 IO 工作. 在探索了 HttpClient 中的各种类之后,我看到它在内部使用了 HttpClientHandler,它派生自 HttpMessageHandler 并实现了它的 SendAsync 方法. 这是Http ..
发布时间:2021-12-14 20:46:44 C#/.NET

ASP.NET MVC4 异步控制器 - 为什么要使用?

我试图了解为什么以及何时应该使用 async 控制器操作.最终,当我在其中使用 await 时,它将等待操作完成以返回视图. 例如 public async Task试试我(){等待 SomeActionAsync();返回视图();} 在这种情况下,如果我使用 async 或不使用 async,Action 将花费相同的时间来执行. 如果我不尝试并行运行至少 2 个缓慢的操作(不相互 ..

返回Task的接口的同步实现

类似于实现一个接口这需要同步代码中的 Task 返回类型,尽管我很好奇是否应该忽略我的情况生成的编译器错误. 假设我有一个这样的界面: 公共接口 IAmAwesome {任务 MakeAwesomeAsync();} 在某些实现中,使用 async 和 await 异步完成会带来极大的好处.这确实是界面试图允许的. 在其他情况下,也许很少见,只需要一个简单的同步方法就可以使很棒.所 ..