是否有C#TPL Dataflow for C ++的替代品?

时间:2013-04-06 02:46:36

标签: c# c++ task-parallel-library dataflow tpl-dataflow

我最近在Using Delegates to simulate connected objects上发布了一个问题,我在使用TPL DataFlow库时非常轻松,干净地开发了我的应用程序解决方案。

问题是我被困在.NET 3.5或C#下。我以为我可能已经能够升级到.NET 4.5,在这个阶段我不能。至于我已经能够确定我不能将Dataflow库重新定位到.NET 3.5,所以我的下一个解决方案是在类似于TPL Dataflow的情况下寻找C ++替代方案 - 它不是最好的方案,但我可以编译DLL的C ++代码并将其导入我们的C#应用​​程序。

总结我对这个问题的C ++库的要求:

  • 我需要能够在复杂网络中将节点连接在一起,并在它们之间传递资源单元。其中一些将随着时间的推移产生有限的资源。其他人会以特定的速度消费它。

2 个答案:

答案 0 :(得分:2)

您可以考虑使用mono's version of TPL Dataflow并自行编译.Net 3.5。

我认为在尝试编译代码时遇到的最大问题是它很大程度上依赖于TPL,这通常不适用于.Net 3.5。但是it seems a backported version is available in older versions of Rx,所以使用它可以工作。

(另外,部分版本的TDF是由我编写的,我没有收到任何关于它的任何反馈,因此很可能确定存在错误。)

答案 1 :(得分:0)

幸运的是,有人似乎正在创建 C# TPL 数据流的 C++ 等效项: https://github.com/renestein/Rstein.AsyncCpp#Flat-Dataflow

片段:

 auto transform1 = DataFlowAsyncFactory::CreateTransformBlock<int, string>([](const int& item)-> Tasks::Task<string>
                                                      {
                                                        auto message = "int: " + to_string(item) + "\n";
                                                        cout << message;
                                                        //await async operation returning standard shared_future.
                                                        co_await GetCompletedSharedFuture();
                                                        co_return to_string(item);
                                                      });