使用线程池的最佳做法
本主题介绍了使用线程池的最佳做法。
应做事项
使用线程池在应用中执行并行工作。
使用工作项实现扩展任务,而不阻止 UI 线程。
创建生存时间较短的独立工作项。 工作项异步运行,可以从队列中以任何顺序将它们提交到池中。
使用 Windows.UI.Core.CoreDispatcher 调度对 UI 线程的更新。
使用 ThreadPoolTimer.CreateTimer 而不是 Sleep 函数。
使用线程池,而不是创建自己的线程管理系统。 线程池运行在具有高级功能的操作系统级别,并且优化为根据进程和整个系统内的设备资源和活动来动态缩放。
在 C++ 中,确保工作项代理使用敏捷线程模型(默认情况下,C++ 代理是敏捷的)。
如果无法忍受资源分配在使用时失败,请使用预分配的工作项。
禁止事项
不要创建 period 值 <1 毫秒(包括 0)的定期计时器。 这样将使工作项像单次计时器一样操作。
不要提交需要花费比 period 参数指定的时间量更长的时间才能完成的定期工作项。
不要尝试从后台任务调度的工作项发送 UI 更新(非 Toast 和通知)。 相反,使用后台任务进度和完成处理程序(例如 IBackgroundTaskInstance.Progress)。
使用使用 异步 关键字的工作项处理程序时,不要假定处理程序中的所有代码在工作项上设置完整状态时已执行。 在处理程序中的所有代码都执行之前,线程池工作项可以设置为完整状态。 在工作项已设置为完成状态后,可能会执行处理程序中 await 关键字之后的代码。
不要在未重新初始化的情况下尝试运行预分配的工作项多次。 创建定期工作项