Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 多任务。工厂';s_C#_Task Parallel Library - Fatal编程技术网

C# 多任务。工厂';s

C# 多任务。工厂';s,c#,task-parallel-library,C#,Task Parallel Library,我真的很喜欢第三方物流。只需调用Task.Factory.StartNew()而不必担心任何事情,这是非常令人惊讶的 但是,有可能在同一个线程上运行多个工厂吗? 基本上,我希望有两个不同的队列,执行不同类型的任务。 一个队列处理类型A的任务,而第二个队列处理类型B的任务 如果队列A无事可做,它应该忽略队列B中的任务,反之亦然 这是否可能做到,而无需创建自己的队列,或为工厂运行多个线程 澄清我想做什么 我从网络设备读取数据。我想用这些数据做两件事,完全独立 我想登录到数据库 我想通过网络发送到另一

我真的很喜欢第三方物流。只需调用
Task.Factory.StartNew()
而不必担心任何事情,这是非常令人惊讶的

但是,有可能在同一个线程上运行多个工厂吗? 基本上,我希望有两个不同的队列,执行不同类型的任务。 一个队列处理类型A的任务,而第二个队列处理类型B的任务

如果队列A无事可做,它应该忽略队列B中的任务,反之亦然

这是否可能做到,而无需创建自己的队列,或为工厂运行多个线程

澄清我想做什么

我从网络设备读取数据。我想用这些数据做两件事,完全独立

  • 我想登录到数据库
  • 我想通过网络发送到另一个设备

  • 有时数据库日志会花费一些时间,我不希望网络发送因此而延迟。

    如果使用.NET 4.0,您可以使用线程队列定义自己的线程池:

    • LimitedConcurrencyLevel TaskScheduler
      (并发级别为1;请参阅)
    如果您使用.NET 4.5:

    • ConcurrentExclusiveSchedulerPair
      (仅从对中取出独占计划程序;请参阅)

    创建两个调度程序并将它们传递给相应的
    StartNew
    。或者使用这些调度程序创建两个
    任务工厂
    ,并使用它们创建和启动任务。

    您将需要一个自定义调度程序。
    工厂
    只是构建
    任务
    ——调度器实际上将其排队。你想达到什么目的。也许有更直接的方法来实现它。@SriramSakthivel
    Task.Run
    在.net 4.5之前不存在…@Gusdor很好,您可以主要通过调度程序指定所有必要的参数,或者使用一次定义的参数创建自己的工厂!这并不难,TPL的力量不在线程中。最强大的方面来自纯回调I/O。除非您真的受到CPU的限制,否则请坚持使用
    Task.Factory.fromsync