Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#中的任务计划程序替换为自定义的任务计划程序_C#_.net_Multithreading - Fatal编程技术网

将C#中的任务计划程序替换为自定义的任务计划程序

将C#中的任务计划程序替换为自定义的任务计划程序,c#,.net,multithreading,C#,.net,Multithreading,我想知道是否可以使用C#更改将任务映射到.NET中真实操作系统线程的任务调度程序,或者是否需要重新编译(例如)Mono运行时来完成此操作。谢谢。我不知道Mono,但使用Microsoft CLR,您基本上需要自己托管CLR并实现相关接口 有关更多信息,请参阅 请注意,无论如何,这是一个非常复杂的话题。该功能最初仅集成在.NET 2.0中,因此Microsoft SQL Server(具有光纤模式)可以将CLR线程映射到光纤,而不是操作系统线程。然而,“实验”被认为是巨大的失败 还要注意,许多.N

我想知道是否可以使用C#更改将任务映射到.NET中真实操作系统线程的任务调度程序,或者是否需要重新编译(例如)Mono运行时来完成此操作。谢谢。

我不知道Mono,但使用Microsoft CLR,您基本上需要自己托管CLR并实现相关接口

有关更多信息,请参阅

请注意,无论如何,这是一个非常复杂的话题。该功能最初仅集成在.NET 2.0中,因此Microsoft SQL Server(具有光纤模式)可以将CLR线程映射到光纤,而不是操作系统线程。然而,“实验”被认为是巨大的失败

还要注意,许多.NET(托管)代码隐式(或通过对Windows API的p/Invoke调用显式)假定CLR和OS线程之间的映射实际上是1:1。

System.Threading.Tasks 如果您引用,那么您需要的是子类化,然后您可以使用类的对象来初始化。MSDN中存在一个错误。我还找到了一个新的方法


线程池 除此之外,您还可以使用它来处理发布到线程池的任务(例如使用)的处理方式

为此,您可能对CodeProject(、和)上的SynchronizationContext系列理解感兴趣


反应性扩展 对于被动扩展中的自定义调度程序,您还可以使用上面提到的SynchronizationContext,有关更多信息,请特别查看位于的教程


其他 当然,你可以滚动,尽管不建议这样做。除此之外,你可以手动处理你的线程-旧方法

处理任务的其他方法包括使用专用线程来完成任务


作为的一部分,您将发现该类基于无锁队列,可以配置为具有任意数量的专用线程,并且等待任务的线程也会贡献时间来执行任务,任何额外的工作都会委托给线程池。这是将System.Threading.Tasks备份到.NET 2.0的持续工作的一部分

在工作类中,现在已经有一段时间没有了,.NET 2.0的
System.Threading.Tasks
的部分后端端口可用于支持自定义TaskScheduler

全篇:正如这个缺乏想象力的名字所暗示的,我是Threaot图书馆的作者。很抱歉丢失了文档,我愿意在使用库的任何方面提供帮助。请报告任何错误,我目前(2013-06-26)在主分支中没有已知错误。

是的,你可以! 通过扩展.Net framework 4.0提供的默认任务计划程序的功能,您可以构建自己的自定义任务计划程序

因此,要构建自定义任务调度器,需要扩展System.Threading.Tasks.TaskScheduler抽象类并重写以下方法。 -排队任务 -GetScheduledTasks
-TryExecuteTaskInline


请参阅链接。

确保您可以编写自己的。。。。你在用什么?a) 线程池b)System.Threading.Tasks b)被动扩展,c)其他?我认为您使用的是System.Threading.Tasks。如果是,您希望将System.Threading.Tasks.TaskScheduler子类化。您是说System.Threading.Tasks.Task中的任务,还是更一般的概念?您完全可以编写自己的TaskScheduler。您可以从自己的(非托管)应用程序托管.NET—就像SQL Server一样—并完全控制这些事情—这就是您想要的吗?非常好地交叉发布到BART DE SMET的博客。那家伙是头儿。