当前位置: 首页 > 编程语言 > C#

C#应该创建一个还是多个后台工作者?分享

时间:2023-04-10 19:31:10 C#

C#我应该创建一个还是多个后台工作者?我是那些临时程序员中的一员,所以我对编程最佳实践知之甚少。我有一个当前使用4个后台工作器的应用程序。所以我宣布他们:privateBackgroundWorkerbw1;私人背景工作者bw2;私人背景工作者bw3;私人背景工作者bw4;然后配置它们:bw1=newBackgroundWorker();bw1.WorkerReportsProgress=true;bw1.DoWork+=newDoWorkEventHandler(bw1_DoWork);bw1.RunWorkerCompleted+=newRunWorkerCompletedEventHandler(bw1_RunWorkerCompleted);bw1.ProgressChanged+=newProgressChangedEventHandler(bw_ProgressChanged);bw2=新的BackgroundWorker();bw2.WorkerReportsProgress=true;bw2.DoWork+=newDoWorkEventHandler(bw2_DoWork);bw2.RunWorkerCompleted+=newRunWorkerCompletedEventHandler(bw2_RunWorkerCompleted);bw2.ProgressChanged+=newProgressChangedEventHandler(bw_ProgressChanged);bw3=新的BackgroundWorker();bw3.WorkerReportsProgress=true;bw3.DoWork+=newDoWorkEventHandler(bw3_DoWork);bw3.RunWorkerCompleted+=newRunWorkerCompletedEventHandler(bw3_RunWorkerCompleted);bw3.ProgressChanged+=newProgressChangedEventHandler(bw_ProgressC挂);bw4=新的BackgroundWorker();bw4.WorkerReportsProgress=true;bw4.DoWork+=newDoWorkEventHandler(bw4_DoWork);bw4.RunWorkerCompleted+=newRunWorkerCompletedEventHandler(bw4_RunWorkerCompleted);我使用bw1.RunWorkerAsync()、bw2.RunWorkerAsync()等...问题是我从不同时调用它们,它们以不同的线性方式在不同的地方调用所以我的问题是,有很多“预设”配置“后台工作者还是拥有一个并根据我的目的更改DoWork和RunWorkerCompleted事件更好?从架构的角度来看,最好为每个后台任务配备一个单独的后台工作者,这在逻辑上与另一个任务无关那个类的。通常我以完全不同的模式使用后台工作者。我不是在开始时一次性定义它们,包括它们各自的事件处理程序,而是在我做需要它的事情时动态创建它们。publicvoidSomeEventHandlerMaybe(objectsender,EventArgse){//做一些事情varbw=newBackgroundWorker();bw.ReportsProgress=true;bw.DoWork+=delegate{//做工作。你可以从这里使用locals};bw.ProgressChanged+=delegate{...};bw.RunWorkerCompleted+=delegate{//对结果做一些事情。};bw.RunWorkerAsync();像这样的东西。它的好处是您可以将所有代码放在一个地方或在后台工作程序中做一些事情,并且它会大致按照正确的顺序完成。通常,如果有助于更有效地使用系统资源,则使用多线程是合理的。对于CPU密集型任务,每个CPU核心一个线程是一个很好的起点。对于IO密集型任务,您当然可以拥有更多。如果您可以灵活地使用.NET4,我会查看TaskParallelLibrary而不是BackgroundWorker。默认情况下,除了提供更简单的编程模型外,它还可以为您做出相对明智的决定,即并发运行多少个线程。使用BackgroundWorker进行处理意味着您可以在单独的线程中进行处理。所以如果你不需要多线程,你不需要单独的后台工作者。如果在启动每个worker后等待完成,则只能有一个worker。它还可能会删除一些代码重复......您出于某些计算目的运行工作人员。如果一个调用的计算被使用或以任何方式依赖于另一个调用,您可以使用多个worker以获得更好的性能(顺便说一句,这也是测量的主题)。如果您只需要完成4个作业并在单独的线程中运行它们只是为了不阻塞主UI,那么worker是一个很好的解决方案。以上是C#学习教程:C#应该创建一个还是多个backgroundworker?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: