task-parallel-library相关内容
任务并行库是否有任何可以被视为对 BackgroundWorker 类的替代或改进的东西? 我有一个带有向导式 UI 的 WinForms 应用程序,它执行一些长时间运行的任务.我希望能够拥有带有标准进度条和取消操作能力的响应式 UI.我之前用 BackgroundWorker 做过这个,但我想知道是否有一些 TPL 模式可以替代? 解决方案 Task 类是对 BackgroundW
..
我正在使用以下代码 var processing = new List();Parallel.ForEach(items, item =>{处理.添加(SomeProcessingFunc(项目));}); 上面的代码线程安全吗?处理后的列表是否有可能损坏?或者我应该在添加之前使用锁? var processing = new List();Parallel.ForEach(items, i
..
我正在使用 任务 长时间运行服务器在我的 ViewModel 中调用,结果使用 TaskScheduler.FromSyncronizationContext() 编组回 Dispatcher.例如: var context = TaskScheduler.FromCurrentSynchronizationContext();this.Message = "加载中...";任务 task =
..
我正在从一个函数开始一个新任务,但我不希望它在同一线程上运行.我不在乎它运行在哪个线程上,只要它是一个不同的线程(所以 这个问题没有帮助. 我能保证下面的代码在允许 Task t 再次输入之前总是退出 TestLock 吗?如果不是,推荐的防止重入的设计模式是什么? object TestLock = new object();公共无效测试(布尔停止=假){任务 t;锁(this.Test
..
.NET 4.5 中有 Task.Delay 如何在 .NET 4.0 中做同样的事情? 解决方案 你可以使用 Timer 在 4.0 中创建一个 Delay 方法: public static Task Delay(双毫秒){var tcs = new TaskCompletionSource();System.Timers.Timer timer = new System.Ti
..
我正在第一次尝试玩新任务,但发生了一些我不明白的事情. 首先,代码非常简单.我传入了一些图像文件的路径列表,并尝试添加一个任务来处理每个文件: public Boolean AddPictures(IList路径){布尔结果 = (paths.Count > 0);列表任务 = 新列表(paths.Count);foreach(路径中的字符串路径){var task = Task.Fact
..
我想触发一个在后台线程上运行的任务.我不想等待任务完成. 在 .net 3.5 中我会这样做: ThreadPool.QueueUserWorkItem(d => { DoSomething(); }); 在 .net 4 中,TPL 是建议的方式.我看到推荐的常见模式是: Task.Factory.StartNew(() => { DoSomething(); }); 但是,Sta
..
我有方法: private static void Method(){Console.WriteLine("Method() 开始");for (var i = 0; i 我想在一个新任务中启动这个方法.我可以像这样开始新任务 var task = Task.Factory.StartNew(new Action(Method)); 或者这个 var task = Task.Run(n
..
我的应用程序中的所有服务调用都是作为任务实现的.当一个任务出现故障时,我需要向用户显示一个对话框来重试上次失败的操作.如果用户选择重试,程序应该重试任务,否则程序应该在记录异常后继续执行.有没有人对如何实现这个功能有一个高层次的想法? 解决方案 UPDATE 5/2017 C# 6 异常过滤器使 catch 子句变得更加简单: 私有静态异步任务重试(Func func, int
..
这是什么意思以及如何解决? 我正在使用 TPL 任务. 整个错误 等待任务或访问其异常属性都没有观察到任务的异常.结果,未观察到的异常被终结器线程重新抛出. 在 System.Threading.Tasks.TaskExceptionHolder.Finalize() mscorlib 解决方案 如果您创建了一个任务,并且您从未调用 task.Wait() 或
..
使用线程非常简单 Thread thread = new Thread(MethodWhichRequiresSTA);thread.SetApartmentState(ApartmentState.STA); 如何在 WPF 应用程序中使用任务完成相同的任务?这是一些代码: Task.Factory.StartNew(() =>{返回“一些文本";}).ContinueWith(r =>
..
问题“为什么这个 Parallel.ForEach 代码会冻结程序?" 建议替换为列出 WPF 应用程序中 ConcurrentBag 的使用情况. 我想了解 在这种情况下可以使用 BlockingCollection 代替吗? 解决方案 你确实可以使用 BlockingCollection,但这样做绝对没有意义. 首先,请注意 BlockingCollection 是实现 I
..
示例 private void Start(object sender, RoutedEventArgs e){int 进度 = 0;为了 (;;){System.Threading.Thread.Sleep(1);进步++;记录器.信息(进度);}} 如果我想让 Start() ,推荐的方法是什么(TAP 或 TPL 或 BackgroundWorker 或 Dispatcher 或其他)
..
是否有关于何时使用 Task.Delay 与 Thread.Sleep? 具体来说,是否有一个最小值可以让一个比另一个更有效/高效? 最后,由于 Task.Delay 导致 async/await 状态机上的上下文切换,使用它是否有开销? 解决方案 使用 Thread.Sleep 当你想阻塞当前线程时. 使用Task.Delay 当你想要一个逻辑延迟而不阻塞当前线程时.
..
在 C# 4.0 中,我们在 System.Threading.Tasks 命名空间中有 Task.Thread 和 Task 之间的真正区别是什么.为了自己学习 ,我做了一些示例程序(来自MSDN的帮助) Parallel.Invoke平行.ForParallel.ForEach 但有很多疑问,因为想法不是那么清楚. 我最初在 Stackoverflow 中搜索了类似类型的问题,但可
..
我想等待 Task 完成并带有一些特殊规则:如果 X 毫秒后仍未完成,我想向用户显示一条消息.如果 Y 毫秒后仍未完成,我希望自动请求取消. 我可以使用 Task.ContinueWith 异步等待任务完成(即 安排在任务完成时执行的操作),但这不允许指定超时.我可以使用 Task.Wait 同步等待任务完成并超时,但是阻塞我的线程.如何异步等待任务完成并超时? 解决方案 这个怎么样
..
背景 我们目前正在开发一个 Web 应用程序,它依赖于 ASP .NET MVC 5、Angular.JS 1.4、Web API 2 和 Entity Framework 6.出于可扩展性的原因,Web 应用程序的繁重性依赖于 async/await 模式.我们的域需要一些 CPU 密集型计算,这可能需要几秒钟( 参见 Stephen Cleary 的博客文章),他们使用 Configur
..
这个问题是由 EF Data Context - Async/Await & 触发的多线程.我已经回答了那个,但没有提供任何最终解决方案. 最初的问题是有很多有用的 .NET API(例如 Microsoft Entity Framework 的 DbContext),提供旨在与 await 一起使用的异步方法,但它们被记录为非线程安全.这使得它们非常适合在桌面 UI 应用程序中使用,但不适
..
前言:我在寻找一个解释,而不仅仅是一个解决方案.我已经知道解决方案了. 尽管花了几天时间研究 MSDN 上关于基于任务的异步模式 (TAP)、async 和 await 的文章,我仍然对一些更精细的细节感到困惑. 我正在为 Windows 应用商店应用编写一个记录器,我想同时支持异步和同步日志记录.异步方法遵循TAP,同步方法应该隐藏所有这些,并且看起来和工作起来像普通方法. 这
..
当等待一个有错误的任务(设置了异常的任务)时,await 将重新抛出存储的异常.如果存储的异常是 AggregateException,它将重新抛出第一个并丢弃其余的. 如何在使用await的同时抛出原来的AggregateException,才不会不小心丢失错误信息? 请注意,当然可以为此想出一些骇人听闻的解决方案(例如,在 await 周围尝试捕获,然后调用 Task.Wait).
..