Multithreading ParallelFor中包含的WF序列中的所有活动都应该是AsyncCodeActivity吗?
AI有一个WF 4应用程序,其中包含一个序列工作流,该工作流具有一个用于包含具有三个序列活动的序列的并行程序。 其中第一个活动是绑定计算的(它生成证书签名请求),第二个是绑定IO的(它发送电子邮件),第三个任务也是绑定IO的(它更新数据库) 我最初将这些都开发为CodeActivities,并看到它们需要是AsyncCodeActivities才能真正在多线程模式下运行。因此,我将第一个绑定到计算的活动修改为AsyncCodeActivity,我可以看到它是多线程执行的。(至少我可以在我的开发机器上观察到更高的处理器利用率,这让我不相信它现在正在运行多线程) 但是,后续任务仍然是非异步代码活动。我的问题如下:Multithreading ParallelFor中包含的WF序列中的所有活动都应该是AsyncCodeActivity吗?,multithreading,workflow-foundation-4,Multithreading,Workflow Foundation 4,AI有一个WF 4应用程序,其中包含一个序列工作流,该工作流具有一个用于包含具有三个序列活动的序列的并行程序。 其中第一个活动是绑定计算的(它生成证书签名请求),第二个是绑定IO的(它发送电子邮件),第三个任务也是绑定IO的(它更新数据库) 我最初将这些都开发为CodeActivities,并看到它们需要是AsyncCodeActivities才能真正在多线程模式下运行。因此,我将第一个绑定到计算的活动修改为AsyncCodeActivity,我可以看到它是多线程执行的。(至少我可以在我的开发机
当所有子活动同时进行时,它们将被安排在同一时间。这意味着放入一个队列,调度程序在同一时间只执行一个队列。对于异步活动,这意味着开始是被调度的,它可以生成其他线程,结束部分在发出完成信号时被调度,并在调度程序开始执行时真正执行
实际上,这意味着对于在具有大量其他工作的服务器上执行的工作流,异步活动最好用于异步IO,如网络或数据库IO。在服务器上,向已经繁忙的系统添加多个CPU线程甚至会降低速度。如果工作流在客户端上执行,则异步IO和CPU工作都是有意义的。Ahh,因此最好以非异步方式执行序列中的第一个计算密集型活动,并以异步方式执行序列中的两个后续活动。如果您在服务器上运行此操作,并且期望合理的工作负载是正确的。