問題タブ [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.
c# - TPL Dataflow はカットされましたか?
私はTPLデータフローをいじるつもりでしたが、VS 2012のどこにも見つからないようです(拡張機能と更新/ナゲットダイアログの内部を含む)。彼らはそれをカットしましたか、それとも私が間違った場所を見ているだけですか?
c# - 操作/UI 通知と UI 情報をキャンセルしますか?
私は現在、Tasks.Dataflow を使用する小さなプロジェクトに取り組んでおり、UI 通知について少し混乱しています。「パイプライン」を という別のクラスの UI から分離したいのですがPipelineService
、キャンセルされた操作または UI に表示されるべきデータについて UI に通知できません。これをどのように適切に処理できますか?
コード:
このメソッドは に関連していForm1.cs
ます。head
のタイプですITargetBlock<string>
。
Invoke
デリゲート メソッドでは有効になりません。ここで何が間違っていますか?
c# - TPLデータフローと非同期メソッド呼び出し
私は並列処理の概念全体をよりよく理解しようとしており、テストケースを設定しました。テストを試してみたところ、Dataflow ActionBlock
(またはTransformBlock
)内でAsyncメソッド呼び出しを使用してもパフォーマンスにプラスの影響はなく、コードが複雑になるだけであることがわかりました。Dataflowブロックを使用している場合、その中のコードは非同期である必要はなく、Dataflowがそれ自体で非同期にするというのは正しいと思います。それとも私はポイントを逃していますか?
.net - Dataflow.TransformBlockのメソッドを「投稿」しないのはなぜですか?コンパイルされません
Webの例では、メソッドがあることがわかりますが、Dataflow.TransformBlock.Post()
コンパイルすることはできません。
エラーは次のとおりです。
「post」は「System.Threading.Tasks.Dataflow.TransformBlock(Of Integer、Integer)」のメンバーではありません。
.net - TPL データフロー LinkTo 複数のコンシューマーが機能しない
メッセージを投稿する BufferBlock があります。
これは、2,400 万行の 5 GB のファイルです。
ActionBlock を使用する Target ブロックができました。
コンソール アプリケーションでは、次のように指定します。
テストのためだけに、制限された容量を 1 のままにしました。
次に、LinkTo を使用して、これら 3 つのコンシューマーをソースにリンクします。
これは、10003 行の後に Thread.Sleep(5000) ステートメントに移動し、while ループの Post は常に false を返します。
私はLinkToを持っているので、solaceTargetBlocksが完了すると次のメッセージを選択できると思っていましたが、LinkToはBufferBlockをクリアしていません。では、どうすれば複数のコンシューマー間で負荷を分散できますか。コンシューマ間で分散するために、単純なロード バランシング ロジックを受信して記述する必要がありますか?
c# - 動的に作成された ActionBlock を BufferBlock にリンクする
これが可能かどうかはわかりませんが、可能であれば、おそらく正しく行っていません。多くのコンシューマー (ActionBlocks) にリンクされている 1 つの共有バッファーがあるとします。各コンシューマは、データをバッファにリンクするために使用される述語を満たすデータを消費する必要があります。たとえば、ActionBlock1 は を満たす数値を消費するx => x % 5 == 0
必要があり、ActionBlock2 は のみを消費する必要がありますx => x % 5 == 1
。
これが私が持っているものです:
そして、私は電話します:
ただし、これは機能しません。コンソールに出力は表示されません。メソッドを次のように変更した場合BuildPipeline
:
コードは期待どおりに動作します。
アクションブロックの動的な作成とリンクが機能しない理由を誰かが明らかにすることはできますか?
ITargetBlock<int> temp = BuildPipeline(5);
PS tempの直後にコードに侵入すると、5 つのターゲットがバッファにリンクされていることが示されます。また、各ターゲットの ID は異なります。
前もって感謝します
編集: svick によって提案された変更を追加しましたが、まだ良くありません:
現在、2 番目の生産ラインのみがデータを処理します (x % 5 == 1 述語を満たすもの)。データは述語を満たしていません。つまり、9 と 7 で終わる数字が得られます。
編集: 作業コードは次のようになります。
c# - BufferBlock を使用する利点データフロー ネットワークで
ActionBlock に直接投稿するだけでなく (BoundedCapacity を使用して)、1 つまたは複数の ActionBlock にリンクされた BufferBlock を使用することに関連する利点があるかどうか疑問に思っていました (スロットリングが必要ない場合)。
c# - TPL DataFlow TransformBlock の入力順序と出力順序の項目の不一致
編集: svick の推奨に従って、カスタム IPropagatorBlock を単純な TransformBlock に置き換えましたが、入力項目の順序と出力項目の順序が一致していません。渡す TransformBlock インスタンス化と Func の下:
そして、これは私が変換ブロックに投稿する方法です:
元の質問:
誰かが次のカスタム変換ブロックを手伝ってくれました。アイデアは、TInput をポスト/センダシンクし、TInput を非同期的に処理する一方で、カスタム変換ブロックが変換されたアイテムを返すときにポストされたアイテムの順序を保持することです。
たとえば、それぞれの順序で 1、2、3 をポストし、変換関数が各入力を 2 乗してアイテムを返す場合、正しい出力値と順序は 1、4、9 である必要があります。 .
ただし、出力順序が正しくないため、コードにエラーがあると思われます。さらに悪いことに、混乱した順序の場所はランダムであるため、デバッグが難しくなりますが、これは明らかに、入力要素を出力要素に変換するために開始されるタスクが常に異なる方法で完了するという事実を反映しています。
誰かが見て、私がここで見逃しているヒントを教えてもらえますか? ありがとう
c# - NullReferenceExceptionをスローする非同期ロギング
AsyncTargetingPackを使用して、.NET4.0を対象とするMVC4コントローラーアクション内のSQLServerにいくつかの情報を非同期で記録しようとしています。.NET 4.5に直接ジャンプしますが、私のアプリはAzureにあり、更新を待っています...
このコードは期待どおりに機能します(例外がスローされることなく行がデータベースに書き込まれます):
そして、このコードはNullReferenceExceptionをスローします。
NullReferenceException:"オブジェクト参照がオブジェクトのインスタンスに設定されていません。"
すべて外部コードであるため、例外を確認することはできません。コードの2番目のブロックが失敗する理由がわかりません。これは私が最初に書いたコードです。
私は何が間違っているのですか?
c# - Dataflow TransformBlock の項目をスキップ
TPL DataflowTransformBlock
は、入力を変換するための を提供します。例:
入力が検証テストに失敗した場合など、入力の一部を出力しないことは可能ですか?
それが不可能な場合、その目的を達成するための最良のパターンは何ですか?
以下のようなものですか?