相关疑难解决方法(0)

Reactive Framework,PLINQ,TPL和Parallel Extensions如何相互关联?

至少从.NET 4.0发布以来,微软似乎已经付出了很多努力来支持并行和异步编程,而且似乎已经出现了很多API和库.特别是最近随处可见的以下花哨的名字:

  • 反应性框架,
  • PLINQ(并行LINQ),
  • TPL(任务并行库)和
  • 并行扩展.

现在它们似乎都是微软的产品,它们似乎都针对.NET的异步或并行编程场景.但目前尚不清楚它们实际上是什么以及它们如何相互关联.实际上有些可能是同一件事.

简而言之,任何人都可以直接记录什么是什么?

parallel-extensions plinq task-parallel-library system.reactive

66
推荐指数
2
解决办法
8003
查看次数

微软的CCR与任务并行库

Microsoft至少有两种不同的方法可以改进对并发操作的支持.

1)并发协调运行时(CCR)是Microsoft Robotics Studio和CCR&DSS Toolkit的一部分

2)Task Paralell Library(TPL)(.NET 4.0的一部分,现在是Beta 1版本)

我想知道是否有人对这两个不同的软件有经验并会比较和对比吗?

.net ccr task-parallel-library

6
推荐指数
2
解决办法
4278
查看次数

当消费者不堪重负时,如何让快速生产者暂停?

我在我的应用程序中使用TPL Dataflow实现了生产者/消费者模式.我有大数据流网格,其中有大约40个块.网格中有两个主要功能部分:生产者部分和消费者部分.生产者应该继续为消费者提供大量工作,而消费者有时会缓慢地处理传入的工作.当消费者忙于一些指定数量的工作项时,我想暂停生产者.否则,该应用程序会占用大量内存/ CPU,并且行为不可持续.

我制作了演示应用程序以演示此问题:

啮合

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Threading.Tasks.Dataflow;

namespace DataflowTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var options = new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = 4,
                EnsureOrdered = false
            };

            var boundedOptions = new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = 4,
                EnsureOrdered = false,
                BoundedCapacity = 5
            };

            var bufferBlock = new BufferBlock<int>(boundedOptions);
            var producerBlock = new TransformBlock<int, int>(x => x + 1, options);
            var broadcastBlock = new BroadcastBlock<int>(x => x, options);

            var consumerBlock = new …
Run Code Online (Sandbox Code Playgroud)

.net c# dataflow task-parallel-library tpl-dataflow

6
推荐指数
1
解决办法
806
查看次数

有没有办法结合LINQ和async

基本上我有一个类似的程序

var results = await Task.WhenAll(
    from input in inputs
    select Task.Run(async () => await InnerMethodAsync(input))
);
.
.
.
private static async Task<Output> InnerMethodAsync(Input input)
{
    var x = await Foo(input);
    var y = await Bar(x);
    var z = await Baz(y);
    return z;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种奇特的方式将它组合成一个LINQ查询,就像一个"异步流"(我可以描述它的最佳方式).

.net c# linq asynchronous async-await

5
推荐指数
1
解决办法
2270
查看次数

在我的C#应用​​程序中结合使用Task和IObservable是不好的做法?

我最近进入了Rx,我正在使用它来帮助我从数据挖掘应用程序中的几个API中提取数据.

我有一个为每个API实现的接口,它封装了对每个API的公共调用,例如

public interface IMyApi {

    IObservable<string> GetApiName(); //Cold feed for getting the API's name.

    IObservable<int> GetNumberFeed(); //Hot feed of numbers from the API

}
Run Code Online (Sandbox Code Playgroud)

我的问题是关于冷IObservables vs Tasks.在我看来,冷可观察基本上是一项任务,它们的运作方式大致相同.当你可以争辩说任务就是你所需要的时候,把一个任务"抽象"为一个冷酷的观察者,这让我感到很奇怪.同时使用cold observable来包装Tasks会隐藏活动的性质,因为签名看起来与热的observable相同.

我可以代表上述界面的另一种方式是:

public interface IMyApi {

    Task<string> GetApiNameAsync(); //Async method for getting the API's name.

    IObservable<int> GetNumberFeed(); //Hot feed of numbers from the API

}
Run Code Online (Sandbox Code Playgroud)

对于为什么我不应该在Tasks和IObservable之间混合和匹配,有一些传统的智慧吗?

编辑:澄清 - 我已经阅读了其他发布的讨论并理解了Rx和TPL之间的关系,但我的担忧主要在于将两者结合在一个应用程序中是否安全,以及它是否会导致不良做法或线程化和调度陷阱?

c# task-parallel-library system.reactive

3
推荐指数
1
解决办法
903
查看次数