task-parallel-library相关内容

BackgroundWorker 的任务并行库替换?

任务并行库是否有任何可以被视为对 BackgroundWorker 类的替代或改进的东西? 我有一个带有向导式 UI 的 WinForms 应用程序,它执行一些长时间运行的任务.我希望能够拥有带有标准进度条和取消操作能力的响应式 UI.我之前用 BackgroundWorker 做过这个,但我想知道是否有一些 TPL 模式可以替代? 解决方案 Task 类是对 BackgroundW ..
发布时间:2021-12-08 13:34:07 C#/.NET

列表线程安全

我正在使用以下代码 var processing = new List();Parallel.ForEach(items, item =>{处理.添加(SomeProcessingFunc(项目));}); 上面的代码线程安全吗?处理后的列表是否有可能损坏?或者我应该在添加之前使用锁? var processing = new List();Parallel.ForEach(items, i ..
发布时间:2021-12-06 14:14:47 C#/.NET

Task.Factory.StartNew() 是否保证使用另一个线程而不是调用线程?

我正在从一个函数开始一个新任务,但我不希望它在同一线程上运行.我不在乎它运行在哪个线程上,只要它是一个不同的线程(所以 这个问题没有帮助. 我能保证下面的代码在允许 Task t 再次输入之前总是退出 TestLock 吗?如果不是,推荐的防止重入的设计模式是什么? object TestLock = new object();公共无效测试(布尔停止=假){任务 t;锁(this.Test ..
发布时间:2021-12-06 11:50:52 C#/.NET

在 foreach 循环中启动任务使用最后一项的值

我正在第一次尝试玩新任务,但发生了一些我不明白的事情. 首先,代码非常简单.我传入了一些图像文件的路径列表,并尝试添加一个任务来处理每个文件: public Boolean AddPictures(IList路径){布尔结果 = (paths.Count > 0);列表任务 = 新列表(paths.Count);foreach(路径中的字符串路径){var task = Task.Fact ..
发布时间:2021-12-06 11:36:08 C#/.NET

在任务异常的情况下,根据用户输入多次重试任务

我的应用程序中的所有服务调用都是作为任务实现的.当一个任务出现故障时,我需要向用户显示一个对话框来重试上次失败的操作.如果用户选择重试,程序应该重试任务,否则程序应该在记录异常后继续执行.有没有人对如何实现这个功能有一个高层次的想法? 解决方案 UPDATE 5/2017 C# 6 异常过滤器使 catch 子句变得更加简单: 私有静态异步任务重试(Func func, int ..
发布时间:2021-12-05 17:05:54 C#/.NET

等待任务或访问其异常属性都没有观察到任务的异常.结果,未观察到的异常是

这是什么意思以及如何解决? 我正在使用 TPL 任务. 整个错误 等待任务或访问其异常属性都没有观察到任务的异常.结果,未观察到的异常被终结器线程重新抛出. 在 System.Threading.Tasks.TaskExceptionHolder.Finalize() mscorlib 解决方案 如果您创建了一个任务,并且您从未调用 task.Wait() 或 ..
发布时间:2021-12-05 17:02:31 C#/.NET

何时使用 BlockingCollection 以及何时使用 ConcurrentBag 而不是 List?

问题“为什么这个 Parallel.ForEach 代码会冻结程序?" 建议替换为列出 WPF 应用程序中 ConcurrentBag 的使用情况. 我想了解 在这种情况下可以使用 BlockingCollection 代替吗? 解决方案 你确实可以使用 BlockingCollection,但这样做绝对没有意义. 首先,请注意 BlockingCollection 是实现 I ..
发布时间:2021-12-05 16:37:39 C#/.NET

什么时候用Task.Delay,什么时候用Thread.Sleep?

是否有关于何时使用 Task.Delay 与 Thread.Sleep? 具体来说,是否有一个最小值可以让一个比另一个更有效/高效? 最后,由于 Task.Delay 导致 async/await 状态机上的上下文切换,使用它是否有开销? 解决方案 使用 Thread.Sleep 当你想阻塞当前线程时. 使用Task.Delay 当你想要一个逻辑延迟而不阻塞当前线程时. ..
发布时间:2021-12-01 10:04:55 C#/.NET

任务和线程有什么区别?

在 C# 4.0 中,我们在 System.Threading.Tasks 命名空间中有 Task.Thread 和 Task 之间的真正区别是什么.为了自己学习 ,我做了一些示例程序(来自MSDN的帮助) Parallel.Invoke平行.ForParallel.ForEach 但有很多疑问,因为想法不是那么清楚. 我最初在 Stackoverflow 中搜索了类似类型的问题,但可 ..
发布时间:2021-12-01 09:34:06 C#/.NET

异步等待 Task超时完成

我想等待 Task 完成并带有一些特殊规则:如果 X 毫秒后仍未完成,我想向用户显示一条消息.如果 Y 毫秒后仍未完成,我希望自动请求取消. 我可以使用 Task.ContinueWith 异步等待任务完成(即 安排在任务完成时执行的操作),但这不允许指定超时.我可以使用 Task.Wait 同步等待任务完成并超时,但是阻塞我的线程.如何异步等待任务完成并超时? 解决方案 这个怎么样 ..
发布时间:2021-12-01 09:11:18 C#/.NET

Task.Run 在 ASP .NET MVC Web 应用程序中被认为是不好的做法吗?

背景 我们目前正在开发一个 Web 应用程序,它依赖于 ASP .NET MVC 5、Angular.JS 1.4、Web API 2 和 Entity Framework 6.出于可扩展性的原因,Web 应用程序的繁重性依赖于 async/await 模式.我们的域需要一些 CPU 密集型计算,这可能需要几秒钟( 参见 Stephen Cleary 的博客文章),他们使用 Configur ..
发布时间:2021-11-30 13:38:58 C#/.NET

如何在 ASP.NET Web API 中使用非线程安全的异步/等待 API 和模式?

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

同步等待一个异步操作,为什么Wait()会在这里冻结程序

前言:我在寻找一个解释,而不仅仅是一个解决方案.我已经知道解决方案了. 尽管花了几天时间研究 MSDN 上关于基于任务的异步模式 (TAP)、async 和 await 的文章,我仍然对一些更精细的细节感到困惑. 我正在为 Windows 应用商店应用编写一个记录器,我想同时支持异步和同步日志记录.异步方法遵循TAP,同步方法应该隐藏所有这些,并且看起来和工作起来像普通方法. 这 ..
发布时间:2021-11-30 13:38:14 C#/.NET

我想等待抛出 AggregateException,而不仅仅是第一个异常

当等待一个有错误的任务(设置了异常的任务)时,await 将重新抛出存储的异常.如果存储的异常是 AggregateException,它将重新抛出第一个并丢弃其余的. 如何在使用await的同时抛出原来的AggregateException,才不会不小心丢失错误信息? 请注意,当然可以为此想出一些骇人听闻的解决方案(例如,在 await 周围尝试捕获,然后调用 Task.Wait). ..
发布时间:2021-11-30 13:37:26 C#/.NET