問題タブ [taskfactory]
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# - スレッドプールを使用したマルチスレッド
次のコードがあります。
このメソッドCropAndSaveTile
にはしばらく時間がかかるため、スレッド プールを使用してそのタスクを新しいスレッドに分割したいと考えています。を使用してこれを達成しようとしましたTask.Factory.StartNew
。問題は、これら 4 つのパラメーターをスレッドに渡す必要があることです。そのため、オブジェクトにキャストできるクラスを作成する必要がありました。
これはほとんど機能します。問題は、 (パラメータが無効です)をnew Bitmap(info.Image)
スローすることです。ArgumentException
を使用せずにこれをテストしTask.Factory.StartNew
、代わりに を使用してメソッドを直接呼び出すと、CropAndSaveTile(new CropInfo(resized, x, y, level));
正常に動作します。と の間で何かが起こっ StartNew
ており、スレッドが実行されています。SplitTilesRecursive
これは、ループがいつ終了して破棄されるかによって引き起こされる同期の問題resized
でしょうか? そうでない場合、スレッドプールの一部として使用されるスレッドに複数のパラメーターを適切に渡すにはどうすればよいですか?
c# - キャンセル後のタスクの開始方法
3 つのボタンを持つ Windows フォームがあります。1 つのボタンで BlockingCollection にエントリを追加します。1 つはリストの処理を開始し、もう 1 つはリストの処理を停止します。
BlockingCollection にエントリを追加できます。[開始] をクリックすると、期待どおりにリストが消費されます。私はまだ新しいアイテムを追加することができ、それらは引き続き消費されます. ただし、[停止] ボタンをクリックすると、タスクは停止しますが、[開始] ボタンで再度開始することはできません。
タスクが再び開始されないという、タスクのキャンセルで何が間違っていますか? タスクのキャンセルに関する無数の項目を読みましたが、まだ「理解」していません。
どんな助けでも素晴らしいでしょう。これがコードです...
c# - Task.Run と Task.Factory.StartNew の間で異なる例外処理
使用中に問題が発生し、スローされTask.Factory.StartNew
た をキャプチャしようとしました。exception
私のアプリケーションには、長時間実行されるタスクがあり、それをカプセル化したいと考えています。Task.Factory.StartNew(.., TaskCreationOptions.LongRunning);
ただし、を使用している場合、例外はキャッチされませんTask.Factory.StartNew
。ただし、 を使用すると期待どおりに機能しますがTask.Run
、これは単なるラッパーだと思っていましたTask.Factory.StartNew
(たとえば、この MSDN の記事によると)。
実際の例をここに示します。違いは、 を使用する場合は例外がコンソールに書き込まれますが、 を使用する場合は書き込まれTask.Run
ませんFactory.StartNew
。
私の質問は次
のとおりです。例外をスローする可能性
のあるタスクがある場合LongRunning
、呼び出し元のコードでそれらをどのように処理すればよいですか?
c# - データを失うことなく、C#で同じメソッドの複数のインスタンスを同時に実行しますか?
タスクとスレッドがよくわかりません。ネストされた 3 つのレベル内にfor
、異なるスレッド/タスクで複数回実行したいメソッドがありますが、メソッドに渡す変数がおかしくなりました。いくつかのコードで説明しましょう。
これはネストでありmyMethod
、いくつかの数値の階乗を計算したり、さまざまなドキュメントに書き込んだり、応答を組み合わせのリストと照合したり、他の小さなメソッドを呼び出したりするなど、実際には多くのことを行います。いくつかの戻り値 (ブール値) もありますが、私は現時点では気にしないでください。問題は、タスクが終了しないことです。ネストがメソッドを呼び出すたびに、それ自体がリフレッシュされ、以前のインスタンスが削除されます。また、FOR で区切られた値を超える値、たとえばa=71, b=7, c=11
、すべての変数が空 (ゼロで割った理由) で、「0 で除算を試みてください」というエラーが表示されます。私はそれを解決する方法を本当に知りません。
c# - Task.Factory.StartNew は親スレッドに依存しますか?
WCF サービス ライブラリのメソッド内でこのスレッドを実行しています。
以下のコードは、メソッドの最後に実行されます。これを行うのは、WCF からクライアントへの出力に影響を与えないバックグラウンド プロセスが完了するまでユーザーを待たせたくないからです。
私が今抱えている問題は、そのスレッドを実行してクライアントが応答を受け取ると、親スレッドが強制終了されることです。このスレッドも殺します。残りの操作を実行しながら、親スレッドがこのスレッドの終了を待機するようにするにはどうすればよいですか?
要するに、このメソッドがそのスレッドを開始して値 X を返すようにしたいのですが、値を返した後にそのスレッドが終了するのを待ちます。
.net - Task.Factory.StartNew - .Wait() を使用して ContinueWith
TaskFactory を使用してタスクを宣言していますが、深刻な疑問があります。
作成時に continueWith を宣言するタスクを作成していますが、後で開始される 2 番目のタスクにも割り当てていません。
宣言は次のようになります。
ご覧のように。このタスクは次のように宣言されています。
TaskContinuationOptions.OnlyOnFaulted
タスクが実行され、次のコード行は次のようになります。
質問は:
タスクが失敗して終了し、使用した場合.Wait()
。コードが実行を継続する前に、ContinueWith アクションが開始されますか? それとも、キューに入れられて後で開始されますか?
後で開始する場合、多かれ少なかれどのくらいの時間がかかりますか? これThrow Exception
により、スコープ外に起動することができます。
私は次のようなことができることを知っています:
TaskFactory continueWith キューがどのように機能するか知りたいですか。
c# - タスク ファクトリとコールバックを使用した非同期メソッドの作成
非同期操作を起動するいくつかのクラスの作成を開始しており、クライアントがコールバックを登録して結果を受け取るようにしたいと考えています。最終的に以下のコードにたどり着きました。TaskFactory
あくまで一例ですので、他にもっと良い方法があれば教えていただきたいです。Action<>, Func<>
クライアントの基本的な例を次に示します。
Client クラスのGetCLientList
非同期の例を次に示します。
それを行うより良い方法はありますか?Task
関数から戻っcontinueWith
てクライアント側に登録できることはわかっていますが、クラス内にラップしたいと考えています。
編集
別の例を投稿しています。sync
/async
のバージョンを作成しようとしていましたwebrequest
。このアプローチは正しいですか?:
c# - TaskScheduler を同期的に作成し、メイン スレッドで実行する
メイン スレッドで同期的に実行される TaskScheduler を作成して、デバッグ目的で WPF アプリケーションをシングル スレッドとして構成できるようにする方法を探しています。
何か案が?
今のところ、同時実行レベル (使用するスレッドの数) を指定できる MSDN のサンプルLimitedTaskSchedulerと、この拡張機能を使用して、アプリケーションの開始前に静的な TaskFactory を設定しています。
vb.net - taskfactory タスクのキャンセルの処理
.net の taskfactory (並列タスク) ライブラリを使用して作成しているタスクを制御しようとしています。私の呼び出し元プロセスは、2 つの異なる参照ライブラリからアクセスできる 2 つの異なるメソッドを実行する 2 つのタスクを作成します。
タスクがまだ実行されていることがわかり、ボタンをクリックした後、タスクが IsCancellationRequested をチェックし、キャンセルする前に if then ステートメント内でメソッドを実行すると想定しました。これにより、タスク プロセスから個別にタスクを制御できます。