task-parallel-library相关内容
我正在使用 TPL 使用函数 Task.Factory.StartNew() 向系统线程池添加新任务.唯一的问题是我添加了很多线程,我认为它为我的处理器创建了太多无法处理的线程.有没有办法设置这个线程池中的最大线程数? 解决方案 默认的 TaskScheduler(从 TaskScheduler.Default 获得)是类型(内部类)ThreadPoolTaskScheduler.此实
..
您好,我将 _noOfThreads 作为定义的任务一次运行.所以我继续使用 % 操作符继续任务,在循环结束时我有 Tasks.WaitAll.这是代码片段. for (int index = 0; index { foo.bar(); },TaskContinuationOptions.AttachedToParent);}Task.WaitAll(tasks); 但是,我注意到它不会等待
..
我有一个引擎,它有任意数量的轮询器,每个轮询器每隔几秒钟就进行一次“轮询".我希望轮询器在不同的线程中运行,但单个轮询器中的每个“轮询"应该是顺序的,以便一个在下一个之后发生.一切都在使用此代码启动轮询过程: public void StartPolling(){秒表 watch = new Stopwatch();while (Engine.IsRunning){任务 task = Task
..
当使用取消令牌取消有超时的任务(在超时结束之前)时,会抛出异常.示例: mytask.start();bool didTaskRunInTime = mytask.wait(5 mins, _cancelToken); 这意味着我不能像下面那样继续. //任务是否被取消如果(_cancelToken.IsCancelRequested){//记录取消从用户到文件等}如果(didTaskRun
..
我前几天读到,对于长时间运行的任务,我最好的办法是手动创建线程,而不是使用 .NET 的线程池或任务并行.当我正在学习 c# 线程时,我真的很想有人启发我,特别是对于长时间运行的 IO 任务.提前致谢. 解决方案 确实如此.线程池针对小型工作单元进行了优化,您可以通过保留线程池线程来干扰其他工作. 我的经验法则是,如果一个操作可能需要超过一秒钟,它不应该在线程池线程上.那可能很长.
..
我想知道在方法的阻塞版本上使用 TPL TaskFactory.FromAsync 和使用 TaskFactory.StartNew 之间是否有任何性能影响.我正在编写一个支持不超过 100 个并发连接的 TCP 服务器.使用第一个选项编写代码后 &链接多个读&用 continue with 写操作,我留下了难看的、难以调试的代码. 我相信用同步版本编写代码 &然后用 Task 包装它会降低
..
下面有什么区别 ThreadPool.QueueUserWorkItem 对比 Task.Factory.StartNew 如果对于某个长时间运行的任务,上面的代码被调用了 500 次,是否意味着所有的线程池线程都会被占用? 或者 TPL(第二个选项)是否足够聪明,只占用少于或等于处理器数量的线程? 解决方案 如果您要使用 TPL 开始一个长时间运行的任务,您应该指定 Tas
..
CancellationTokenSource 类是一次性的.快速查看 Reflector 可以证明 KernelEvent 的使用,这是一种(很可能)非托管资源.由于CancellationTokenSource没有finalizer,如果我们不处理它,GC就不会处理. 另一方面,如果您查看 MSDN 文章中列出的示例 托管线程中的取消,只有一个代码片段处理令牌. 在代码中处理它的正
..
下面的代码片段有什么区别?不会都使用线程池线程吗? 例如,如果我想为集合中的每个项目调用一个函数, Parallel.ForEach(items, item => DoSomething(item));对比foreach(var item in items){Task.Factory.StartNew(() => DoSomething(item));} 解决方案 第一个是更好的选择.
..
我正在处理一个多任务网络项目,我是 Threading.Tasks 的新手.我实现了一个简单的 Task.Factory.StartNew(),我想知道如何使用 Task.Run() 来实现? 基本代码如下: Task.Factory.StartNew(new Action((x) =>{//用 'x' 做一些事情}), 原始数据); 我在对象浏览器中查看了System.Threadin
..
我正在尝试对任务列表使用 Task.WaitAll.问题是任务是一个异步 lambda,它打破了 Tasks.WaitAll 因为它从不等待. 这是一个示例代码块: List任务 = 新列表();tasks.Add(Task.Factory.StartNew(async () =>{使用 (dbContext = new DatabaseContext()){var 记录 = 等待 dbC
..
这是我的问题:我需要在 ApiController 中调用多个第 3 方方法.这些方法的签名是Task DoSomethingAsync(SomeClass someData, SomeOtherClass moreData).我希望这些调用在 ApiController 将数据发送回客户端后继续在后台运行.当 DoSomethingAsync 完成时,我想做一些日志记录并可能将一些数据保存到文件
..
我正在尝试使用 .NET 4.0 任务模式反序列化从 http://api.usa.gov/jobs/search.json?query=nursing+jobs 返回的 JSON.它返回这个 JSON('加载 JSON 数据'@http://jsonviewer.stack.hu/). [{"id": "usjobs:353400300","position_title": "护士","org
..
我有一些用 c# 编写的东西,可以执行并发代码,大量使用任务并行库(任务和未来延续链). 我现在将其移植到 F# 并试图找出使用 F# 异步工作流与 TPL 中的构造的优缺点.我倾向于 TPL,但我认为这两种方式都可以完成. 有没有人有关于用 F# 编写并发程序的技巧和智慧可以分享? 解决方案 这个名字几乎概括了区别:异步编程与并行编程.但在 F# 中,您可以混合搭配.
..
我想知道如何以“正确"的方式编写自己的异步方法. 我看过很多像这样解释 async/await 模式的帖子: http://msdn.microsoft.com/en-us/library/hh191443.aspx //签名中需要注意的三件事://- 该方法有一个 async 修饰符.//- 返回类型是 Task 或 Task.(请参阅“返回类型"部分.)//这里是 Task因为
..
我想同时执行几个异步任务.每个任务都将运行一个 HTTP 请求,该请求可以成功完成也可以抛出异常.我需要 await 直到第一个任务成功完成,或者直到所有任务都失败. 如何实现 Task.WhenAny 接受谓词的方法,以便我可以排除未成功完成的任务? 解决方案 public static Task获取第一结果(ICollection>任务工厂,谓词谓词) 其中 T : 类{v
..
所以我一直在通过 Reflector 研究 HttpClient.SendAsync 的实现.我特意想了解的是这些方法的执行流程,并确定调用哪个 API 来执行异步 IO 工作. 在探索了 HttpClient 中的各种类之后,我看到它在内部使用了 HttpClientHandler,它派生自 HttpMessageHandler 并实现了它的 SendAsync 方法. 这是Http
..
我发现 TaskCompletionSource.SetResult(); 在返回之前调用等待任务的代码.就我而言,这会导致死锁. 这是在普通Thread 中启动的简化版 void ReceiverRun()而(真){var msg = ReadNextMessage();TaskCompletionSource任务 = 请求 [msg.RequestID];if(msg.Error =
..
我试图了解为什么以及何时应该使用 async 控制器操作.最终,当我在其中使用 await 时,它将等待操作完成以返回视图. 例如 public async Task试试我(){等待 SomeActionAsync();返回视图();} 在这种情况下,如果我使用 async 或不使用 async,Action 将花费相同的时间来执行. 如果我不尝试并行运行至少 2 个缓慢的操作(不相互
..
类似于实现一个接口这需要同步代码中的 Task 返回类型,尽管我很好奇是否应该忽略我的情况生成的编译器错误. 假设我有一个这样的界面: 公共接口 IAmAwesome {任务 MakeAwesomeAsync();} 在某些实现中,使用 async 和 await 异步完成会带来极大的好处.这确实是界面试图允许的. 在其他情况下,也许很少见,只需要一个简单的同步方法就可以使很棒.所
..