問題タブ [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.

0 投票する
1 に答える
1783 参照

c# - WCF サービス プロキシで System.Threading.Tasks を使用する効果的な方法はありますか?

タスク スケジューラに関する最近の MSDN Magazine の記事を読んだ後、それを使用すると、WCF で生成されたプロキシを使用するメリットがあることを期待していました (そして実際には非常に興奮していました)。

私は次の利点のいくつかを得たいと思っていました:

  • 1) 実行中の WCF 操作を中止する機能(サーバー上で操作を停止することは期待していません。「このタスクの結果は必要ありません」というシグナルを送信できるようにしたいだけです。これはサービス呼び出しをトリガーするグリッドから項目を繰り返し選択する UI では特に一般的です)。
  • 2) 作成時以外の時点でタスクを開始する機能- これが本当に必要かどうかはわかりませんが、タスクを生成してすぐに実行しない方がよいと思いました。結局、それがタスクの要点だと思いました。
  • 3) バインド可能なプロパティ- WCF UI をバインドしてIsCompleted、Task クラスが操作の内部を UI から抽象化できるようにします。
  • 4)操作の実行を抽象化する機能-モック、何とか何とか、将来のリファクタリングなど。

ただし、これらの利点はまったく得られないようです。

  • 1) Task にはアボート機能がありません。これは本当に奇妙に思えます。
  • 2)私が扱うことができる唯一のオーバーロードTask.Factory.FromAsync<>は、以下に示すものです。これにより、(Fiddler で見られるように) Web サービス操作の実行がすぐに開始され、後で呼び出しを開始できません。
  • 3) タスクが実装されていないINotifyPropertyChangedため、UI にバインドできません。
  • 4) 他の 3 つの利点が発生していないことを考えると、これは水中で死んでいるようなものです :-(

すっごく....WCFで生成されたプロキシをタスクで動作させようとして時間を無駄にしているだけですか-それとも何か不足していますか。

0 投票する
2 に答える
11693 参照

c# - Parallel.ForEachの実行中にparallelOptions.MaxDegreeOfParallelismを変更することは可能ですか?

マルチスレッドループを実行しています:

並列ループの実行中にparallelOptions.MaxDegreeOfParallelismを変更して、スレッドの数を増減したいと思います。

スレッドが増えていないようです。誰かアイデアはありますか?

0 投票する
4 に答える
56665 参照

c# - タスクコンストラクターのキャンセルトークン:なぜですか?

特定のSystem.Threading.Tasks.TaskコンストラクターはCancellationToken、パラメーターとしてを取ります。

これについて私を困惑させるのは、メソッド本体の内部から、渡されたトークンを実際に取得する方法がないことです(たとえば、のようなものはありませんTask.CurrentTask.CancellationToken)。トークンは、状態オブジェクトなどの他のメカニズムを介して提供されるか、ラムダにキャプチャされる必要があります。

では、コンストラクターでキャンセルトークンを提供することは、どのような目的に役立ちますか?

0 投票する
3 に答える
8257 参照

c#-4.0 - Parallel.Invoke - 例外処理

私のコードは 4 つの関数を実行して、次のようなクラスに (Invoke を使用して) 情報を入力します。

私の質問は、彼が菜食主義者でない場合、null を返すことはできませんが、すべてのスレッドを停止し、処理を停止して null を返すことができるようにしたいということです。どうすれば達成できますか?

0 投票する
3 に答える
30613 参照

c# - TPL Task オブジェクトで Dispose() を呼び出さないことは受け入れられると考えられますか?

バックグラウンド スレッドで実行するタスクをトリガーしたいと考えています。タスクの完了を待ちたくありません。

.net 3.5 では、次のようにしました。

.net 4 では、TPL が推奨される方法です。私が推奨する一般的なパターンは次のとおりです。

ただし、StartNew()メソッドはTaskを実装するオブジェクトを返しますIDisposable。これは、このパターンを推奨する人々によって見落とされているようです。Task.Dispose()メソッドに関するMSDNのドキュメントには、次のように記載されています。

「タスクへの最後の参照を解放する前に、必ず Dispose を呼び出してください。」

タスクが完了するまで dispose を呼び出すことはできないため、メイン スレッドを待機させて dispose を呼び出すと、そもそもバックグラウンド スレッドで実行する意味がなくなります。また、クリーンアップに使用できる完了/終了イベントもないようです。

Task クラスの MSDN ページはこれについてコメントしておらず、本「Pro C#2010...」は同じパターンを推奨しており、タスクの破棄についてはコメントしていません。

そのままにしておくと、最終的にファイナライザーがそれをキャッチすることはわかっていますが、このような多くのファイアアンドフォーゲットタスクを実行していて、ファイナライザースレッドが圧倒されたときに、これが戻ってきて噛むことはありますか?

だから私の質問は:

  • Dispose()この場合、Taskクラスを呼び出さないことは許容されますか? もしそうなら、なぜ、そしてリスク/結果がありますか?
  • これについて説明しているドキュメントはありますか?
  • Taskまたは、私が見逃したオブジェクトを処分する適切な方法はありますか?
  • または、TPL を使用してファイア アンド フォーゲット タスクを実行する別の方法はありますか?
0 投票する
4 に答える
3172 参照

c# - Backgroundworker と TPL の Task は同じ ManagedThreadID を持っていますか?

バックグラウンドでジョブを順番に実行することを目的とする Backgroundworker があります。現在、1 つのジョブがマルチスレッド方式で実装されています。つまり、Backgroundworker は複数のスレッドを作成します。私は Task Parallel Library を使用しているので、Task.Factory.StartNew を使用して複数のタスクを作成します。

タスクが実行された後、Backgroundworker はすべてのタスクが完了するまで待機します。

次に、Backgroundworker の ManagedThreadID とすべてのタスクの ManagedThreadID を出力します。BackgroundWorker の ManagedThreadID は常に最初のタスクの ManagedThreadID と同じであることがわかりました。これはあってはならないことだと思うので、説明できません。Backgroundworker のスレッドは、それが作成するすべてのタスクとは異なる必要があるため、ManagedThreadID はすべて互いに異なる必要があると思います。

このシナリオが発生する理由を説明できる人はいますか? どうもありがとうございました。

編集:

コードは次のようになります。

1 つのタスクが Backgroundworker と同じ ManagedThreadID を持っていることがわかります。

0 投票する
1 に答える
410 参照

.net-4.0 - 並列タスクに .Net 4.0 の新機能を使用する

以前、ビデオ ファイルを受け取り、エンコーディング サービスに送信し、エンコーディングが完了するのを待ってからファイルをダウンロードするサービスの設計について質問したことがあります。

そのためのコードを書き始めたところ、同僚の 1 人が、BackgroundWorker を使用して記述する代わりに、.Net 4.0 の新機能を使用することを提案しました。いくつか読んだことがありますが、Parallel 機能はすばらしいと思います。他に実装すべき新機能はありますか? 私は.net 4.0が初めてです。

ありがとう!

0 投票する
4 に答える
1136 参照

.net - TPL と InvokeRequired/Invoke の比較

.NET 4.0 以降、非同期タスクを実行するための TPL があります。msdn を読んでいる場合、フォーム/UI と対話するすべての非同期操作は、引き続き InvokeRequire ... Invoke() パターンを使用します。私が尋ねているのは、それには理由がありますか?私が学んだことから、TPL は古いスレッド化メカニズムの一種に取って代わるべきです。では、UI のスレッド化に関してそれを無視するポイントは何でしょうか? それについて何か考えはありますか?

0 投票する
2 に答える
1132 参照

c# - whileループをTPLに置き換える機会はありますか?

2つのwhileループがあり、TPLと並行して実行します。

私のコード:

この2つのアクションを安全にキャンセルできればいいのですが。アドバイスをいただけますか?

前もって感謝します。

よろしく、プロ

0 投票する
1 に答える
398 参照

c# - Task Parallel Library で書かれたプログラムをテストするための CHESS に代わるものはありますか

Task Parallel Library コンストラクトで作成されたプログラムを使用して、考えられるすべてのインターリーブ (スペリング?) に対して単体テストを実行できるツールを探しています。または、dotNET 4.0 で CHESS を実行するにはどうすればよいですか?