[英]Akka.net actors in STA
我需要将成千上万种不同格式的Office文档转换为一种通用格式。 为了使事情更快,我将使用akka.net对其进行并行化。 WordSaveAsActor应该:
甚至可以在STA中运行akka.net actor吗? 如果我以这种方式使用akka.net,是否有任何担忧?
简短的答案是“是的,您可以使用Akka.NET做到这一点”
正如汉斯在评论中指出的那样:
Word不太在乎您的图书馆。 它的互操作接口是单线程的,您从工作线程进行的任何调用都会自动编组到拥有Application对象的线程中。
您可以使用Akka.NET中的调度程序对参与者的并发需求进行一些控制-您可以在Akka.NET Bootcamp课程2.1中了解不同类型的Akka.NET调度程序以及它们的工作方式 。
对于您而言,这是我建议您执行的操作:
WordSaveAsActor
并将其配置为使用Akka.NET中的CurrentSynchronizationContextDispatcher
,可以通过配置来完成: var wordActor = MyActorSystem.ActorOf(Props.Create(() => new WordSaveAsActor(...)).WithDispatcher("akka.actor.synchronized-dispatcher"))
这个参与者处理的所有消息将在STA线程上自动完成。 我们在其他STA环境(例如Windows Forms UI)中使用了此技术,它大大简化了一切。
WordSaveAsActor
。 正如汉斯指出的那样,除非您并行运行Word的多个实例,否则利用它的COM API一次实际上不能做多个操作。 因此,为了利用Akka.NET的并行性,您需要找到一种方法来使用多个参与者来并行化不需要Word的操作部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.