問題タブ [tpl-dataflow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
task-parallel-library - 優先 TPL DataFlow BufferBlock
TPL DataFlow ライブラリからの優先バッファブロックの実装がすぐにできるかどうか疑問に思っていましたか?
c# - MVVM WPF アプリケーションで TPL Dataflow を使用する実際のアプリケーション シナリオ
TPL Dataflow がデータ サービスで使用されている場合に、MVVM アプリケーションで TPL Dataflow を使用する方法を示す例を教えてください。
私の MVVM アプリケーションでは、アプリケーション ブロックを、モデル (モデルの更新を担当するドメインおよびサービス プロジェクト)、ビュー モデル (アプリケーション プロジェクト)、およびビュー (プレゼンテーション プロジェクト - WPF アプリケーション) を実装する 5 つの異なるプロジェクトに分けました。
コンソール アプリケーションを使用してドメイン、サービス、およびアプリケーション ブロックをテストすると、すべて正常に動作します。
今のところ、アプリケーション ブロックをテストするために、後で WPF アプリケーションに入れるものをテストするために Winform プロジェクトを作成しましたが、何も機能しません。
Async CTP: (C# Dataflow) Real Estate、(C# Dataflow) Dining Philosophers でサンプルを見ました。これらの例は Dataflow の使用方法を示していますが、コードは GUI に配置されており、一部のサービス アセンブリに分離されていません。
私のドメインとアプリケーション ブロックは非常に複雑で、GUI に配置したくありません。
CCR の後継として TPL Dataflow について読みましたが、実際のところ、数年前に自分のプロジェクトで既に CCR を使用していました。このようなシナリオでは、CCR が役に立ちました。
c# - キューに入れられたアイテムの数がBatchSize未満の場合、タイムアウト後に自動的にTriggerBatchを呼び出すにはどうすればよいですか?
Dataflow CTPの使用(TPL内)
タイムアウト後に、現在キューに入れられている、または延期されているアイテムの数がBatchSize未満の場合、BatchBlock.TriggerBatchを自動的に呼び出す方法はありますか?
さらに良いことに、このタイムアウトは、ブロックが新しいアイテムを受信するたびに0にリセットする必要があります。
task-parallel-library - rxのObservable.FromEventPatternに相当するTPLは何ですか?
rxでは次のように書くことができます:
次に、observableをサブスクライブして、sqlDepオブジェクトのOnChangeイベントをobservableに変換します。
同様に、タスク並列ライブラリを使用してC#イベントからタスクを作成するにはどうすればよいですか?
編集:説明 Drewが指摘し、user375487が明示的に記述したソリューションは、単一のイベントで機能します。タスクが終了するとすぐに...まあそれは終了します。
監視可能なイベントは、いつでも再度トリガーできます。観測可能な流れとして見ることができます。TPLデータフローの一種のISourceBlock。ただし、ドキュメントhttp://msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspxには、ISourceBlockの例はありません。
私は最終的にそれを行う方法を説明するフォーラムの投稿を見つけました:http ://social.msdn.microsoft.com/Forums/en/tpldataflow/thread/a10c4cb6-868e-41c5-b8cf-d122b514db0e
public static ISourceBlock CreateSourceBlock(Action、Action、Action、ISourceBlock> executor){var bb = new BufferBlock(); executor(t => bb.Post(t)、()=> bb.Complete()、e => bb.Fault(e)、bb); bbを返す; }
私は上記のコードを試していません。非同期デリゲートとCreateSourceBlockの定義の間に不一致がある可能性があります。
task-parallel-library - Reactive Extensions(Rx)を介したTPLデータフローの使用例は何ですか
私は特に、信号処理アルゴリズムをどちらか一方、または両方の組み合わせで作成することを検討しています。
パフォーマンスは大きな問題ではありません。意図を明確に表現することがより重要です。
次の「ブロック」を実装して構成することを検討しています。
- フィルタ(FIRとIIRの両方)
- 位相検出器
- インテグレーター
- ミキサー
- 関数発生器
- PLL(上記をビルディングブロックとして使用)
Rxは「Linq-to-streams」と見なすことができ、TPLは並行性を抽象化したものであることがわかりました。また、Rxは内部でTPLを使用して非同期ビットを管理し、TPLデータフローはTPLに構成可能性を追加します。
したがって、両方とも非同期であり、両方とも構成可能であり、両方とも非常に高レベルです(Rx moreso)。一般的に、そして上記の信号処理項目の両方で、それぞれをどこで使用する必要がありますか?
c# - 新しいTasks.Dataflowブロックはネットワーク上で機能しますか?
新しいTasks.Dataflowブロックをネットワーク上で機能させるのはどれほど難しいのだろうかと思っていました。最善のアプローチは何でしょうか?WCF RPCを使用してブロックをリンクしますか、それともサードパーティのメッセージング/キューサービスを使用しますか?
それでもメッセージをアトミックに消費することはできますか?私がSQSで抱えている問題の1つは、メッセージが1回だけ配信されるという非保証者です。
c# - 明白な BufferBlock.Post/Receive/ReceiveAsync レース/バグ
http://social.msdn.microsoft.com/Forums/en-US/tpldataflow/thread/89b3f71d-3777-4fad-9c11-50d8dc81a4a9に相互投稿
私は知っています...私はTplDataflowを最大限に活用していません。ATMBufferBlock
プロデューサーとコンシューマーが異なる速度で実行されているメッセージ パッシング用の安全なキューとして使用しているだけです。どうすればよいのか途方に暮れる奇妙な動作が見られます。
上記のコード (2000 行の分散ソリューションの一部) では、約Send
100 ミリ秒ごとに定期的に呼び出されています。これは、アイテムが1 秒間に約 10 回Post
編集されることを意味します。messageQueue
これは確認済みです。ただし、ReceiveAsync
タイムアウト内に が完了せず (つまり が完了しない)、30 秒後にPost
発生する場合があります。この時点で数百に上ります。これは予想外です。この問題は、投稿速度が遅い場合 (1 投稿/秒) にも見られ、通常、1000 個のアイテムが を通過する前に発生します。ReceiveAsync
TimeoutException
messageQueue.Count
BufferBlock
したがって、この問題を回避するために、次のコードを使用しています。これは機能しますが、受信時に 1 秒の遅延が発生することがあります (上記のバグが発生するため)。
BufferBlock
これは私には TDF の競合状態のように見えますが、同様の方法で使用する他の場所でこれが発生しない理由を突き止めることはできません。実験的に からReceiveAsync
に変更しReceive
ても役に立ちません。私は確認していませんが、上記のコードは完全に機能すると思います。これは、「TPL データフローの概要」tpldataflow.docxに記載されているパターンです。
この問題の根底にたどり着くにはどうすればよいですか?何が起こっているかを推測するのに役立つメトリクスはありますか? 信頼できるテスト ケースを作成できない場合、他にどのような情報を提供できますか?
ヘルプ!
c# - 非常に多くのファイルを扱う
私は現在、多数のファイル (240k) のインデックス作成を含む研究プロジェクトに取り組んでいます。それらはほとんどが html、xml、doc、xls、zip、rar、pdf、およびテキストで、ファイルサイズは数 KB から 100 MB 以上に及びます。
すべての zip ファイルと rar ファイルを抽出すると、最終的に合計 100 万個のファイルが得られます。
TPL Dataflow と Async CTP V3 をサポートする Visual Studio 2010、C#、および .NET 4.0 を使用しています。これらのファイルからテキストを抽出するために、Apache Tika (ikvm で変換) を使用し、Lucene.net 2.9.4 をインデクサーとして使用します。新しい TPL データフロー ライブラリと非同期プログラミングを使用してください。
いくつかの質問を聞きたいんです:
TPL を使用するとパフォーマンスが向上しますか? これは主に I/O プロセスであり、私が理解していることから、TPL は I/O を頻繁に使用する場合にはあまりメリットがありません。
プロデューサー/コンシューマー アプローチは、このタイプのファイル処理に対処するための最良の方法でしょうか、それとも他に優れたモデルはありますか? ブロッキングコレクションを使用して、複数のコンシューマーを持つ 1 つのプロデューサーを作成することを考えていました。
TPL データフロー ライブラリは、この種のプロセスに役立ちますか? TPL Dataflow は、ある種のメッセージング システムで使用するのが最適なようです...
この場合、非同期プログラミングを使用するか、同期に固執する必要がありますか?
.net - このブロックは、作成元のソースでのみ使用する必要があります
この初期ネットワークで TPL データフローを使用しています。
メッセージが b に到着すると、b はフィルターを使用して新しい変換ブロックを作成し、それをそれ自体に追加します (各メッセージに対しては行いません)。
ネットワークは次のようになります。
数回実行すると、ネットワークは次のようになります。
これはうまく機能し、「スイッチ」ブロックのデフォルトアクションを取得するために私が見つけた唯一のソリューションです。
ただし、customSource.Complete() を呼び出してソースが完成すると、例外がスローされます。
ArgumentException: このブロックは、System.Threading.Tasks.Dataflow.DataflowBlock.FilteredLinkPropagator で作成されたソースでのみ使用する必要があります
1.System.Threading.Tasks.Dataflow.ITargetBlock<T>.OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock
。System.Threading.Tasks.Dataflow.Internal.SourceCore で1.OfferMessageToTarget(DataflowMessageHeader header, TOutput message, ITargetBlock
1 つのターゲット、ブール値& messageWasAccepted) で System.Threading.Tasks.Dataflow.Internal.SourceCore1.OfferToTargets(ITargetBlock
1 linkToTarget) で System.Threading.Tasks.Dataflow.Internal.SourceCore`1.OfferMessagesLoopCore() で
c# - FromCurrentSynchronizationContext、何か不足していますか?
私は現在、数千のファイルを保持する大きなバイナリ ファイルから読み取るアプリケーションを使用しており、すべてのファイルはアプリケーション内の他のクラスによって処理されています。このクラスは、オブジェクトまたは null を返します。メインフォームの進捗状況を表示したいのですが、何らかの理由で理解できません。
「TaskScheduler.FromCurrentSynchronizationContext」を使用しても、上記のコードはフォームをフリーズします。なぜですか? 以下のコードを使用すると、フォームが正常に更新されるため
私はこのTPLデータフロー全体に不慣れなので、2番目のコードスニペットでは機能し、最初のスニペットでは機能しない理由について誰かが光を共有できることを願っています.
敬具、マルティン