問題タブ [task-parallel-library]
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# - 同じリストにネストされた Parallel.ForEach ループ?
リスト内の要素に対して徹底的なペアワイズ比較を行うメソッドを並列化する必要があります。シリアル実装は簡単です:
この場合、foo は element1 または element2 の状態を変更しません。ネストされた Parallel.ForEach ステートメントを単純に実行するのは安全ではないことはわかっています。
並列タスク ライブラリを使用してこれを実装する理想的な方法は何でしょうか?
c# - TaskScheduler.UnobservedTaskExceptionイベントハンドラーがトリガーされることはありません
C#タスク並列ライブラリに関する本を読んでいて、次の例がありますが、TaskScheduler.UnobservedTaskExceptionハンドラーがトリガーされることはありません。誰かが私に理由について何か手がかりを与えることができますか?
c# - PLINQ での長時間実行タスクのキャンセル
NET 4.0 並列タスク ライブラリを使用して、複数の FTS クエリを処理しようとしています。クエリに時間がかかりすぎる場合は、キャンセルして残りの処理を続行したいと考えています。
このコードは、1 つのクエリがしきい値を超えても停止しません。単一のトランザクションではなく、プロセス全体でキャンセルタスクと制限時間に到達するように呼び出していると思います。期間を非常に短く (300 ミリ秒) に設定すると、すべての検索文字列に対して呼び出されます。
明らかな何かが欠けていると思います..洞察を事前に感謝します。
さらに、これはまだ非常に長いクエリの実行を停止していないようです。これは、実行時間の長いクエリがトリガーされた後にキャンセルする正しい方法ですか?
変更されたコード:
.net-4.0 - タスク並列ライブラリ。ネストされたタスクが開始しない
私は.NETの新しいTPLライブラリを使用していますが、説明できない奇妙な動作に直面しています。私の場合、何らかの理由でネストされたタスクが開始されません。私は私が持っている解決策を次のように単純化しました:
同時に実行されている5つのタスクがあります。各タスクは、保留中のキューからいくつかの要素を取得し、いくつかの操作を実行してから、この操作の結果に対してネストされたタスクを実行しようとします。問題は、要素が多すぎて(while(true)がこれをシミュレートしている場合)、5つのタスクすべてが常に実行されている場合、ネストされたタスクが開始されないことです。は、whileループを使用してほとんどのタスクの実行が終了した後にのみ開始できます。
ネストされたタスクの実行をブロックするwhileステートメントに問題があるようですが、何がわかりません:)
c# - C# 4.0 で Task クラスを継承する
バックグラウンドで処理する作業単位をスケジュールし、結果を生成しようとしています。当初、私は Task クラスを拡張し、カスタム タスクのそのインスタンスをスケジュールすることを考えていました。(Java から Future と Runnable を考える) 各タスクは、入出力用に複数のプロパティをカプセル化します。複数のタスクが同時に処理され、完全に自律的です。
しかし、そうしている例が見つからないので、それが正しい方法であるかどうか疑問に思い始めています。誰かが System.Threading.Tasks でこれを正しく行う例を提供できますか
c# - Parallel.Invoke がすべてのアクションを完了できないのはなぜですか?
C# での並列プログラミングに関する教科書の例に取り組みました。この本は、Parallel.Invoke がタスクの作成、呼び出し、および待機を置き換えることができることを示唆しています。ただし、Parallel.Invoke を使用すると、値を返す前にタスクが終了しないことがわかりました。しかし理論的には、Parallel.Invoke は常に待機する必要があります。
コード:
そして、関数を実行する方法:
これprivate void generateGraphData(byte[] data, int partitionStart, int partitionEnd)
は、partitionStart から partitionEnd までのデータ配列を埋める関数です。
プログラムを実行すると、配列の一部だけが埋められます。しかし、Invokeを次のように置き換えると
プログラムは期待どおりに実行されます (配列は完全に満たされています)。
ここで何が問題になる可能性がありますか?
前もって感謝します。
c# - マルチステップタスクの進行状況の追跡
私は、Webサービスをクライアントに公開する単純なサーバーに取り組んでいます。一部のリクエストは完了するまでに長い時間がかかる場合があり、論理的に複数のステップに分割されます。このような要求については、実行中に進捗状況を報告する必要があります。さらに、前のリクエストが完了する前に新しいリクエストが開始される可能性があり、両方を同時に実行する必要があります(システム固有の制限を除く)。
サーバーにTaskIdをクライアントに返してもらい、クライアントにTaskIdを使用してリクエストの進行状況を追跡させることを考えていました。これは良いアプローチだと思います。タスクの管理方法の問題が残っています。
TPLを使ったことがないので、この問題に取り組むのに良い方法だと思いました。実際、スレッドを手動で管理しなくても、複数のタスクを同時に実行できます。ContinueWithを使用すると、比較的簡単にマルチステップタスクを作成することもできます。
ただし、タスクの進行状況を追跡するための良い方法を思い付くことができません。私のリクエストが単一の「ステップ」で構成されている場合、そのステップは協力してその状態を報告する必要があることを認識しています。これは、現時点では避けたいものです。ただし、リクエストが複数のステップで構成されている場合は、現在実行中のステップを知り、それに応じて進捗状況を報告したいと思います。私が思いつくことができる唯一の方法は非常に面倒です:
また、UpdateProgressに既知の場所を更新させるのではなく、タスクに独自の進行状況を保存させたいので、これでも完全ではありません。さらに、新しいステップを追加するときに多くの場所を変更しなければならないという明らかな欠点があります(現在、進捗状況は50%、100%ではなく33%、66%、100%です)。
誰かが良い解決策を持っていますか?
ありがとう!
task-parallel-library - タスク並列ライブラリ(またはPLINQ)は他のプロセスを考慮に入れていますか?
特に、TPLを使用して外部プロセスを開始(および待機)することを検討しています。TPLは、別のタスク(したがって、私の場合は別の外部プロセス)を開始することを決定する前に、マシンの総負荷(CPUとI / Oの両方)を調べますか?
例えば:
エンコードまたはトランスコードする必要のあるメディアファイルが約100個あります(たとえば、WAVからFLACへ、またはFLACからMP3へ)。エンコードは、外部プロセス(FLAC.EXEやLAME.EXEなど)を起動することによって行われます。各ファイルには約30秒かかります。各プロセスはほとんどCPUにバインドされていますが、そこにはいくつかのI/Oがあります。私は4つのコアを持っているので、最悪の場合(デコーダーをエンコーダーにパイプすることによるトランスコーディング)はまだ2つのコアしか使用しません。私は次のようなことをしたいと思います:
これにより、100個のタスク(したがって、CPUをめぐって競合する200個の外部プロセス)が開始されますか?それとも、CPUがビジーで、一度に2〜3回しか実行しないことがわかりますか?
c#-2.0 - C# 2.0 でタスク並列ライブラリ (TPL) を使用することはできますか?
現在、C# 2 で立ち往生していますが、TPL の優れた並列処理を利用できればよいのですが...これは可能ですか?
c# - データベースからのコンテンツの取得、検索、および HTML としての保存を並列化する
HTML コンテンツがバイナリ シリアル化された BLOB として格納されているデータベース テーブルがあります。コンテンツを 1 つずつ取得し、コンテンツ内の特定のキーワードを探し (そして見つかった一致を報告)、コンテンツを HTML ファイルとしてディスクに保存する必要があります。Parallel.ForEach を使用してこれを並列化できますか? これは良いアイデアですか、それとももっと良いアイデアがあります。
助けてくれてありがとう、アシッシュ