我想知道是否可以使用 C# 更改将任务映射到 .NET 中真实操作系统线程的任务调度程序,或者是否需要重新编译 Mono 运行时来执行此操作。谢谢。
系统.线程.任务
如果您参考系统.线程.任务那么你需要的是子类化任务调度器然后你可以使用你的类的对象来初始化任务工厂。有一个example在 MSDN 中。我还找到了一个psyCodeDeveloper 博客中的示例.
线程池
除此之外你可以使用同步上下文处理将任务发布到线程池的方式(使用ThreadPool.QueueUserWorkItem例如)得到处理。
为此,您可能对 CodeProject 的了解 SynchronizationContext 系列感兴趣(part 1, part 2 and part 3).
反应式扩展
至于Reactive Extensions中的自定义调度程序,您还可以使用上面提到的SynchronizationContext,有关更多信息,请查看教程:introtorx.com尤其第 4 部分:并发.
Others
当然可以滚你自己的线程池,尽管不建议这样做。除此之外,您可以手动处理线程 - 老方法。
处理任务的其他方法包括使用定时器进行调度并有专用的线程来完成工作。
作为塞拉奥特图书馆你会发现班级Work它基于无锁队列,可以配置为具有任意数量的专用线程,等待任务的线程也贡献其时间来执行任务,任何额外的工作都委托给线程池。这是将 System.Threading.Tasks 向后移植到 .NET 2.0 的持续努力的一部分。
In 塞拉奥特图书馆Work 类已经消失有一段时间了,部分向后移植System.Threading.Tasks
.NET 2.0 提供了对自定义 TaskScheduler 的支持。
全面披露:正如缺乏想象力的名称所暗示的那样,我是威胁库的作者。抱歉缺少文档,我愿意在使用库的任何方面提供帮助。请报告任何错误,我目前(2013-06-26)在主分支中没有已知的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)