問題タブ [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.
.net - .Net 3.5プロジェクトでタスク並列ライブラリを使用できますか?
タスク並列ライブラリは.Net3.5プロジェクトで使用できると聞きました。これは正しいですか?はいの場合、どのように使用しますか?.Net 4.0ではSystem.Threadingにありますが、Visual Studio2010でターゲットとして.Net3.5を選択すると、ParallelやParallelループなどのクラスにアクセスできません。
c# - 並列因数分解の実行中のオーバーフロー例外
私はそれほどスマートではない因数分解プログラムを作成しようとしており、TPL を使用して並行して実行しようとしています。しかし、コア 2 デュオ マシンで約 15 分間実行した後、内部にオーバーフロー例外がある集計例外が発生します。スタック トレースのすべてのエントリは .NET フレームワークの一部であり、オーバーフローは私のコードによるものではありません。なぜこれが起こるのかを理解する上で、どんな助けもいただければ幸いです。
コメント付きのコードは次のとおりです。うまくいけば、理解するのに十分簡単です。
スローされる例外は次のとおりです。
どんな助けでも大歓迎です。
ありがとう!
編集
Simon の返信に続いて、今度はcatch(AggregateException x)
句を付けてコードを再度実行し、InnerExceptions
コレクション内のすべての要素を調べました。正確に 2 つの要素がありました (実行のスレッドごとに 1 つだと思います。2 つの CPU コアがあるため、TPL は 2 つのスレッドのみを使用するように最適化します)。両方の例外は同一でした(両方ともOverflowException
)...だから、それは答えではありません。
解決
Henk の答えは正しいことが判明しました。これは、Microsoft ブログからの半公式のリンクであり、それを確認しています: What's New in Beta 2 for PLINQ
c# - 並列タスク ライブラリ WaitAny 設計
PTL の調査を始めたばかりで、設計に関する質問があります。
私のシナリオ: それぞれが画像を参照する URL のリストがあります。各画像を並行してダウンロードしたい。少なくとも 1 つのイメージがダウンロードされるとすぐに、ダウンロードしたイメージで何かを行うメソッドを実行したいと考えています。そのメソッドは並列化すべきではありません。シリアル化する必要があります。
以下はうまくいくと思いますが、これが正しい方法かどうかはわかりません。画像を収集するためのクラスと、収集した画像で「何か」を行うためのクラスが別々にあるため、タスクの配列を渡すことになります。これは、画像の取得方法の内部動作を公開するため、間違っているようです。しかし、私はそれを回避する方法を知りません。実際には、これらの方法の両方にさらに多くの機能がありますが、これは重要ではありません。画像の取得と処理の両方を行う 1 つの大きなメソッドにまとめてはいけません。
c# - TPLと非同期パターンの使用の実際的な違い
私は、長時間実行される操作を処理するために言及された方法のいずれかを使用することを検討しています。
これらのそれぞれを使用して何が達成できるかについては詳しく説明しませんが、私が何をしたいのかを説明したいと思います。
HTTP関連のメソッドのセットがあり、それぞれがいくつかの情報を取得します。これはすべて、長時間実行されるサービス内のより大きなシステムの一部です(したがって、1回限りの使い捨てコードではありません)。
一般に、カプセル化と保守性の観点から、どちらのアプローチが優れていますか。Begin/ End / AsyncCallbackメカニズムを使用して準備ができたときに返されたデータを処理するか、各イベントの派生EventArgsクラスを使用してOnXXXReceived、OnXXXErrorなどのタスク内からイベントを発生させますか?
十分に明確になっていることを願っています。特定の実装のヒントよりも、意見、アドバイス、および起こりうる落とし穴に関心があるため、コードサンプルを提供しないことにしました。
ありがとう!
c# - SQLDataReaderでタスク並列ライブラリ(TPL)を使用する方法はありますか?
TPLのParallel.ForおよびParallel.ForEach拡張メソッドのシンプルさが気に入っています。似たようなものを利用する方法があるのか、それとも少し高度なタスクを利用する方法があるのだろうかと思っていました。
以下は、SqlDataReaderの一般的な使用法です。可能かどうか、可能であれば、以下のwhileループをTPL内の何かに置き換える方法を考えていました。リーダーは一定の反復回数を提供できないため、For拡張メソッドは使用できず、収集するタスクを処理することになります。私は誰かがすでにこれに取り組み、ADO.netでいくつかのすべきこととすべきでないことを解決したかもしれないことを望んでいました。
c# - TaskCreationOptions.LongRunningオプションとThreadPool
TPLは、タスクスケジューラを使用してタスクを調整します。公式文書によると、デフォルトのタスクスケジューラはスレッドプールを使用しますが、TaskCreationOptions.LongRunning
オプションが表示されると、そのタスク専用のスレッドが作成されます(A)。
質問:現時点では、Visual Studio 2010のMSDNドキュメントの準備ができておらず、現在のオンラインMSDNは完成していません。(A)が正しいか間違っているか誰かが知っていますか?
visual-c++ - 複数のPCで単一のプログラムを実行するためのC++ライブラリ(つまり、「グリッドコンピューティングを使用してアプリを実行する」)
私は、単一のプログラムをネットワーク上の複数のコンピューターで実行するように変換する方法を求めています(「グリッドコンピューティング」を考えてください)。
私はMSVC2007とC++(非.NET)を使用しています。
私が書いたプログラムは、並列プログラミング(科学データの分析を行う)に最適であるため、コンピューターの数が多いほど優れています。
c# - この非同期ロギング コードを使用することの欠点は何ですか?
私が書いたいくつかのコードは次のとおりです。
これは、メソッド呼び出しの期間を非同期的に記録する目的で PostSharp アスペクトをメソッドに適用する方法を示しています。これにより、ロギング プロセスが遅い場合、アスペクトで修飾されたメソッドの呼び出し元にはこのパフォーマンス ペナルティが見られません。 .
MyFirstMethod が完了し、ロギング メソッドが別のスレッドでオフに設定され、MySecondMethod が並行して実行されているため、機能しているようです。これは、非常にトラフィックの多い Web アプリケーション (高度にマルチスレッド化された環境) 内のメソッドを同様のインストルメンテーションで装飾するというものです。
そうすることの落とし穴は何ですか?(たとえば、いつでも許可されるスレッド数の制限に達することを懸念しています)。
c# - スローされたすべての例外を Task で処理したいのですが、例外が親に到達するのを止めるのが難しいと感じています
私は.NET 4.0でラムダを非同期に実行し、終了時に結果を特定のURIに投稿するWebフックに取り組んでいます。
私はそれを機能させましたが、スローされた例外をタスクで処理したいので、それらが親に到達するのを止めるのが難しいと感じています。
ここに私のコードの一部があります:
私が試した別のバージョンではContinueWith()
、実行する継続と実行する継続を登録するために 2 回呼び出しOnlyOnRanToCompletion
を行いましたOnlyOnFaulted
。(2回呼び出すContinueWith()
のが正しいかどうかはわかりません。):
したがって、基本的には、各タスクが継続関数を介して独自の例外を処理する方法が必要です。現状では、HandlException 継続関数は上記のいずれの例でも呼び出されていません。
私はテスト ケースで例外を引き起こしていますTasks.WaitAll(tasks);
。アサーションを行う前にすべてのタスクが完了していることを確認するために、Task の配列に対する呼び出しを使用していることに言及する必要があります。その呼び出しが違いを生むかどうかはわかりません。タスクによる例外の処理方法。現在、WaitAll は、HandleException 継続関数によって処理されていないため、各タスクの例外を集約する AggregationException をスローします。
c# - ネストされたParallel.Forを使用する
この例を考えてみましょう。
xを印刷すると、常に4950になります。これを並列化する場合はどうでしょうか。
これが私が思いついたものです
ただし、実行するたびに4950が印刷されるわけではありません。なんで?