我需要将不同格式的数千个ms办公文档转换为一种通用格式。为了加快速度,我将使用akka.net进行并行化。 WordSaveAsActor应该:
甚至可以在STA中运行akka.net actor吗?如果我以这种方式使用akka.net,有什么顾虑吗?
答案 0 :(得分:3)
简短的回答是“是的,你可以用Akka.NET做到这一点”
汉斯在评论中指出:
Word并不关心你的图书馆。它的互操作接口是单线程的,您从工作线程进行的任何调用都会自动封送到拥有Application对象的线程。
您可以使用Akka.NET中的调度程序来控制您的actor的并发需求 - 您可以read about different types of Akka.NET dispatchers and how they work in our Akka.NET Bootcamp Lesson 2.1。
在你的情况下,这是我建议你做的事情:
WordSaveAsActor
并将其配置为使用Akka.NET中的CurrentSynchronizationContextDispatcher
,您可以通过配置执行此操作:
var wordActor = MyActorSystem.ActorOf(Props.Create(() => new WordSaveAsActor(...)).WithDispatcher("akka.actor.synchronized-dispatcher"))
此actor处理的所有消息将在STA线程上自动完成。我们在其他STA环境中使用此技术,例如Windows Forms UI,它极大地简化了所有内容。
WordSaveAsActor
。正如Hans指出的那样,除非你并行运行多个Word实例,否则你不可能一次利用其COM API进行多个操作。因此,为了利用Akka.NET的并行性,您需要找到一种方法来使用多个actor来并行化不需要Word的操作部分。