問題タブ [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 データフロー。BatchBlock を ActionBlock にアタッチできません。型引数は使用法から推測できませんか?
私はこのバッチブロックを
そして、この ActionBlock として
それらを次のように添付しようとすると
batchBlock.LinkTo(actionBlock);
というエラーが表示されますThe type arguments for method System.Threading.Tasks.Dataflow.DataflowBlock.LinkTo<TOutput>(System.Threading.Tasks.Dataflow.ISourceBlock<TOutput>, System.Threading.Tasks.Dataflow.ITargetBlock<TOutput>)' cannot be inferred from the usage. Try specifying the type arguments explicitly
これを行っても、まったく同じエラーが発生します..
batchBlock.LinkTo((ActionBlock<IEnumerable<string>>)actionBlock);
ActionBlock
ただし、コンストラクターでcreate a new をアタッチする代わりに、コンパイラーは文句を言いません。
誰が私が間違っているのか教えてもらえますか? actionBlock
なぜ私に私のものを付けさせてくれないのですbatchBlock
か???
c# - BlockBuffer.RecieveAsync をフィルタリングする適切な方法
良い一日。
rpc 呼び出し用の TPL データフロー メッシュがあります。
2 つのねじれていないフローがあり、単純化すると次のようになります。
出力フロー:
- 出力を格納する BlockBuffer
- 出力をサーバーに送信し、送信済み ID を生成するための ActionBLock
入力フロー:
- データを受け取る while ループ
- データを解析する TransformBlock
- sendid で回答を保存する BlockBuffer
問題があります。別のスレッドから呼び出しを行うと、回答が混乱する可能性があるため、フィルタリングする必要があります。
私のrpc呼び出し:
ご覧のとおり、この呼び出しの応答を判断するのに役立つ uniqueId がありますが、それをフィルタリングして待機するにはどうすればよいですか?
rpc 呼び出しとフィルターを使用した LinkedTo で作成されるバッファーの配列 (おそらく WriteOnceBlock?) を持つのは良い方法ですか?
.net - 並列非同期 BLOB 削除のための TPL Dataflow よりもシンプルなソリューション
Azure ストレージから BLOB を削除する必要があるワーカー ロールを Azure に実装しています。ブロブのリストに約 10,000 のアイテムがあると仮定しましょう。
最も単純な同期アプローチは、おそらく次のようになります。
要件:
同じことを非同期に (単一のスレッドで) 実装したいと考えています。
同時接続数を 50 に制限したいので、同時に 50 の非同期接続しか実行されないときに 10K の削除を行います。1 つの削除が完了すると、新しい削除を開始できます。
解決?
これまでのところ、 this questionとthis oneを読んだ後、TPL Dataflowが進むべき道のようです。
これは非常に単純な問題であり、データフローはやり過ぎのように思えます。より簡単な代替手段はありますか?
そうでない場合、これはデータフローを使用してどのように実装されますか? 私が理解しているように、async
削除を実行する単一のアクション ブロックが必要です (必要await
ですか?)。ブロックを作成するときはMaxDegreeOfParallelism
、50 に設定する必要があります。次に、リストから 10K のブロブをブロックにポストし、block.Completion.Wait()
. これは正しいです?
.net - TPL DataFlow: カスタム分割ブロックの作成
.Net の TPL の一部であるデータフロー ライブラリの助けを借りて、カスタム スプリットブロックを作成するための助けが必要です。
私が達成したいのは、入力を受け取り、これを複数の変換ブロックに分割する単純なカスタム ブロックだけです。これは、データをフィルタリングするために必要です。ここで、否定的なエントリをログに記録し、良いエントリを続行できます。
私のニーズでは、入力を 2 つの異なる出力に分割するだけで十分です。クラスヘッダーは次のようになります...
私の問題は、どうすればいいのか本当にわからないということです。私が知っているのは、2 つの TransformBlocks が必要だということだけです。
すべての試行で、左と右のブロックの入力を格納するために複数の ITargetBlocks を持つことになりましたが、これは正しくありません。
あなたが与えることができるすべてのヒントに感謝します。
c# - tpl データフロー: プロデューサーの開始ブロック
最初のブロックがプロデューサーブロックになるパイプラインを構築しようとしています。Enum オブジェクトを取得し、これに従って大量のデータを生成します。このデータは、到着するとパイプラインの次のステップに自動的に送信されます。
これを行う方法はありますか?または、カスタムブロックを作成する必要がありますか?
vb.net - BatchedJoinBlock(Of T1, T2) での Orderby の使用 - データフロー (タスク並列ライブラリ)
BatchedJoinBlock ( http://msdn.microsoft.com/en-us/library/hh194683.aspx ) の結果を並べ替えて、さまざまなターゲットのさまざまな結果をまとめられるようにしたいと考えています。説明します!擬似コードの例:
基本的に、文字列とオブジェクトがあります。上記の SortByResult 変数は、文字列を並べ替えたいとおりに並べ替えます。target2 で同じインデックス番号にあったオブジェクトを同じ順序にする方法を探しています。たとえば、「String1Target1」の順序が変更された場合、「StringBuilder1」と一緒に何らかの形で確実に参照/ペアリングしたいと考えています。実際の最終結果は、ソートされる文字列 (target1) によって指定された順序でオブジェクト (target2) がソートされることだけです。何かのようなもの:
しかし、私は喜んで中間的な解決策を取ります! また、文字列をキーとして辞書 (results.Item2.ToDictionary) を使用してみました (これも適切な解決策です) が、適切なコンテキストでラムバ式を使用することは私の考えを少し超えています。リストなどを使用していくつかのステップで現実的にこれを行うことができますが、より効率的なものを取得しようとしている/何かを学ぼうとしています.joinblockの結果には多くのデフォルトオプションがあるようです.使用するのに十分な経験。ご協力いただきありがとうございます。
c# - tpl データフロー: アイテムを破棄せずにバッファ サイズを固定
データフローをいじった後、新しい問題に遭遇しました。すべてのブロックの入力キューを制限したいと思います。私のプロデュース ブロック (ActionBlock) は、5000 個の要素を非常に高速に作成し、それらをブロードキャスト ブロックに投稿します。したがって、ブロードキャスト ブロックの BoundedCapacity を 100 に設定すると、大量のデータが破棄されます。しかし、プロデューシングブロックがバッファブロックの入力キューで新しいスロットを待つことを好みます。
この問題を解決する方法はありますか?
c# - c#DataflowまたはTasks、メッセージを消費して並行して処理する
外部キューからメッセージを受け取りたい場合は、 inRedis
などと言ってください。1 つのスレッドが常にキューをチェックし、関連する処理にメッセージを送信するほうがよいでしょうかBroadcastBlock
(例)
次に、処理のためにパイプラインにブロードキャストするのはどれTasks
ですか?それとも、メッセージをすべてキューから取り出して自分で処理している 4 つの方がよいでしょうか?
最初の例では、TPL DataFlow
ブロックは実際に並行して処理されますか、それとも別のタスクである必要がありますか? リソースを最大限に活用するアプローチを決定しようとしています。アドバイスをいただければ幸いです。
task-parallel-library - Web API 要求からバックグラウンド タスクを開始する
ASP.WEB Web Api コントローラーを使用して、遅いコードを起動して忘れる必要があります。それを行う良い方法は何ですか?つまり、遅いコードがどこかで実行され続けている間、コントローラーがブラウザーに HTML 応答を返すようにしたいということです。
トレッド プールからワーカー スレッドを取得し、コントローラーによって作成された複雑なオブジェクトを渡すことは良い考えですか? それとも、作業を行うために別の Windows サービスを作成する必要がありますか?