【问题标题】:Single Threaded SynchronizationContext单线程同步上下文
【发布时间】:2014-07-31 15:22:26
【问题描述】:

我的服务器中有一个异步方法,我希望始终在专用线程上运行(调用者不等待它,只是分派),而不是从 ThreadPool 中运行。我找到了一些单线程 SynchronizationContext 的实现,但它们似乎未经测试,我想使用更稳定的实现。

我找到了 Nito AsyncEx 的 AsyncContext,但我无法确定它是否可以在整个应用程序生命周期中在单个专用线程上运行。

有人知道 AsyncContext 是否符合我的要求吗?或者,您知道单线程 SynchronizationContext 的经过测试且稳定的实现吗?

【问题讨论】:

  • 让代码在特定线程上运行需要解决producer-consumer problem。最简单的解决方案是线程安全队列,它带有一个从队列中检索作业的循环。 “工作”可以简单地是一个动作委托。
  • 为什么需要单线程同步上下文?

标签: c# async-await synchronizationcontext


【解决方案1】:

您不需要同步上下文 - 有一个任务计划程序可以完全满足您的需求 - ConcurrentExclusiveSchedulerPair

基本上,您会将所有任务安排到该对中的独占调度程序,并且所有任务都将在单独的线程中按顺序处理。

【讨论】:

  • 那么当总是使用scheduler 的同一个实例时,会不会像MyAsyncMethod().Start(scheduler.ExclusiveScheduler);?这会总是发生在同一个线程上吗?
  • @mot 如果它实际上是异步的,而不仅仅是并行的,可能更像是ContinueWithConfigureAwait,但是是的,这就是想法。您不应该真正从方法中返回未启动的Tasks,那只是自找麻烦:D
猜你喜欢
  • 1970-01-01
  • 2015-04-28
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
相关资源
最近更新 更多