首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科技成果中的Akka.net演员

科技成果中的Akka.net演员
EN

Stack Overflow用户
提问于 2015-03-09 10:47:54
回答 1查看 1.2K关注 0票数 3

我需要将数千个不同格式的ms office文档转换成一种通用格式。为了加快速度,我将使用akka.net对其进行并行化。WordSaveAsActor应:

  • 在单线程空间中运行
  • 保存Word应用程序实例
  • 对这个实例进行COM调用,比如SaveAs(..)使用来自多个并行线程的接收消息的路径
  • 通过任何崩溃重新启动自己

在STA中可以运行akka.net演员吗?如果我以这种方式使用akka.net,会有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 20:11:08

简短的回答是“是的,你可以用Akka.NET做到这一点”

正如汉斯在其评论中指出的那样:

字不太在乎你的图书馆。它的互操作接口是单线程的,您从工作线程发出的任何调用都会自动封送到拥有Application对象的线程。

您可以使用Akka.NET中的调度程序对参与者的并发需求进行某种控制--您可以使用了解不同类型的Akka.NET调度器以及它们如何在我们的Akka.NET启动营中工作。

就你而言,下面是我建议你做的事情:

  1. 在STA线程上创建您的WordSaveAsActor并将其配置为在Akka.NET中使用CurrentSynchronizationContextDispatcher,您可以通过配置这样做:

var wordActor = MyActorSystem.ActorOf(Props.Create(() => new WordSaveAsActor(...)).WithDispatcher("akka.actor.synchronized-dispatcher"))

此参与者进程将在STA线程上自动完成所有消息。我们在其他STA环境(如Windows )中使用了这种技术,它极大地简化了一切。

  1. 在使用默认dispatcher (CLR线程池)的其他参与者上执行不需要Word COM组件的所有其他工作。这可能包括任何文件副本,打开,移动等。当您需要向word发送数据或从word接收数据时,可以让这些参与者将消息传递给您的WordSaveAsActor

正如Hans所指出的,除非您并行运行多个Word实例,否则一次不能使用它的COM执行多个操作。因此,为了利用Akka.NET的并行性,您需要找到一种方法来使用多个参与者来并行操作中不需要Word的部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28940122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档