問題タブ [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.
.net - マルチスレッドプロセスのparallel.forまたはtask.startnew
別のクラスのプロセスに渡す必要のある文字列のリストがあります。速度、効率、並列処理の観点から、2つのアイデアのどちらを使用するのが良いかを知りたいと思います。リストには±10000の文字列が含まれており、スレッドを適切に制限して、一度に実行されるスレッドが約5つになるようにします。
タスクファクトリは正常に機能しているようですが、どちらを実装すればよいかわかりません。
どんなアイデアでもありがたいです。
c# - スリープ タスク (System.Threading.Tasks)
〜1秒待ってから前の写真を復元するよりも、 Windowsフォームウィンドウで写真を置き換えるスレッドを作成する必要があります。
次のコードだと思いました:
仕事をしますが、残念ながらそうではありません。メイン UI スレッドをフリーズします。
これは、1 つのタスクに 1 つのスレッドが存在することが保証されていないためです。1 つのスレッドを複数のタスクの処理に使用できます。TaskCreationOptions.LongRunningオプションでさえ役に立ちません。
どうすれば修正できますか?
.net - 特定の時間枠が経過したときに別のタスクからタスク スレッドを開始する
特定の時間 x 秒後に別の Task1 から ac# 4.0 Task2 (TPL) を開始するにはどうすればよいですか?
サンプル シナリオ:
アルゴリズムを計算する Task1 を開始します。計算に少なくとも X 秒かかった場合、別のタスクを開始して、UI をブロックしない素敵なアニメーションをユーザーに表示します。
asp.net - ASP.NET での Task.Factory タイムアウト
非同期タスクのタイムアウト設定に関する情報を探していますが、wait() を含まないものは見つかりません。多分私はこれを間違って見ています。
ファイル転送を完了するのに 10 分かかる API 呼び出しがあります。ユーザーが座ってこれが起こるのを見る必要がないように、新しいスレッドを作成しました。データベースの更新を追加したので、何が起こっているのかがわかります。数分後にアップロードが開始されます...何もありません。転送は中止され、例外はスローされず、データベースは更新されません。これは、スレッドがドロップされたことを意味するに違いありませんよね? どうすればそれをより長く生き続けることができますか?助けてくれてありがとう。
c# - Dispatcher.BeginInvoke または Task.StartNew 中に GUI がフリーズする
注:この質問に依存します
やあ。私はこのようなビューモデルを持っています:
そして、IPersonService
実装ではこれを行います:
ただし、検索クエリが実行されている間、GUI は自由であることを期待しています。でも凍った!私の間違いがどこにあるのか分かりますか?私を助けてくれませんか?ありがとうございます!
.net - ループ内の Texture で SetData を実行するときの TaskFactory の実行時間を持つ XNA
この質問は XNA での実装に関するものですが、より一般的な C# フォーラムに適していると思います。XNA で TaskFactory を使用して、ロード画面をユーザーに表示しながら追加のリソースを初期化しています。コードは次のようになります。
必要な時間をログに記録しましたDoSomeFinalizingStuff
。メイン ウィンドウにフォーカスがあると、メソッドに時間がかかります。DoSomeFinalizingStuff
SetData メソッドを使用して、実際には 400x400 の Texture2D (プロセスには表示されず、作成および変更されたばかり) に書き込みます。
AVG 焦点が合っていて表示されているときの所要時間: ~5000ms (最大 10k+ の場合もある) AVG 焦点が合っていない (および表示されていない) ときの所要時間: ~100ms
計測した時間は の実際の実行時間ですDoSomeFinalizingStuff
。それは AVG で 50 倍の違いです。私はかなり好奇心旺盛です。
デバッガーを実行すると、チェーンされたすべてのタスクが完了するまでに約 1 秒かかります。デバッグや対話なしで実行すると、はるかに遅くなります。通常、読み込み画面は完了するまで約 10 ~ 15 秒間そこに留まります。
メインウィンドウからフォーカスを切り替えると、タスクをより速く実行するように「トリガー」できます。切り替えるとすぐに、関数が実行されます。
SetData() 呼び出しを削除すると、パフォーマンスは、デバッグ時またはウィンドウが非アクティブなときと同じになります。
なぜこれが起こっているのですか?この動作を変更する方法はありますか?
wcf - タスクの永続性 C#
タスクを永続的に保持し、WCF サービスから無期限に実行するのに苦労しています。私はこれを間違った方法で行っている可能性があり、提案を喜んで受け入れます。
BlockingCollection にドロップされた着信要求の処理を開始するタスクがあります。私が理解していることから、 GetConsumingEnumerable() メソッドを使用すると、データが到着したときに永続的にプルできるはずです。それ自体は問題なく動作します。Windowsフォームを使用してリクエストに記入し、送信することで、エラーや欠陥を1つも発生させることなく、数十のリクエストを処理することができました. このプロセスに自信が持てたら、asmx Web サービスを介して自分のサイトに接続し、jQuery ajax 呼び出しを使用してリクエストを送信しました。
サイトは送信された URL に基づいてリクエストを送信し、Web サービスは URL から html コンテンツをダウンロードし、コンテンツ内の他の URL を探します。次に、見つかった URL ごとにリクエストを作成し、BlockingCollection に送信します。WCF サービス内で、アプリケーションがオンラインの場合 (つまり、タスクが開始された場合)、Parallel.ForEach を介して GetConsumingEnumerable を使用して要求を取得し、要求を処理します。
これは最初のいくつかの送信では機能しますが、タスクは予期せず停止します。もちろん、これはテストでシミュレートできるよりも 10 倍多くのリクエストを実行していますが、スロットルするだけだと思っていました。問題は、タスクを開始する私の方法にあると思います:
これを WF4 サービスに移動し、ワークフローに接続してワークフローの永続性を使用することを考えましたが、必要でない限り WF4 を学習するつもりはありません。さらに情報が必要な場合はお知らせください。
c# - タスク ファクトリはシーケンシャルであり、パラレルではありませんか?
私はスレッドの専門家ではありませんが、関数を一度に N 回並行して実行し、必要に応じて複数のコアを使用できるようにしたいと考えていました。
私は現在、以下のコードを持っています:
GetRSS サンプル:
ご覧のとおり、GetRSS コードでは、counter
取得したページごとの合計エントリ数を更新しています。タイマーが刻むと、カウンターの値がラベルに更新されるため、進行状況を確認できます。
このことから、タスクがすべて一度に機能していないことに気付きましたが、カウンターは X 量のみを更新するため、実際には 1 つずつ機能しています。これは、実行中の単一の機能に相当します。
そこから、上記のコードは実際にはタスクを並行して実行していないと思いますが、順番に実行しているようです。
そうですか?
もしそうなら、実際に並行して実行されるようにコードを変換するにはどうすればよいですか?
c# - TaskFactory で実行中のタスクが見つからない
あまりにも多くのタスクが既にキューに入れられている場合、TaskFactory がタスクを長時間実行しない可能性はありますか? その場合、より多くのタスクをより迅速に実行できるように taskfactory を構成する方法があります。
また、同じプロセス内で TaskFactory と Threadpool.QueueUserWorkItem の両方を使用すると問題が発生しますか? まだ Threadpool クラスを使用している古いライブラリがいくつかあります。
c# - System.Threading.ThreadAbortExceptionが新しいスレッドで発生しました
私は現在.netc#4.0で作業していますが、自分が書いたコードで問題が発生し、頭痛の種になっています。
System.Threading.Tasks.TaskFactoryクラスをSystem.Threading.Tasks.TaskSchedulerと組み合わせて使用して、コンソールアプリケーションで新しいスレッドを開始します。このスレッドの機能は、アイテムがキューに追加されているかどうかを確認することです。アイテムがキューに追加されると、それが処理されます。
したがって、キューには送信される電子メールが含まれ、電子メールがキューに追加されると、電子メールは複数のクライアントを介して送信されます。それぞれへの送信は並行して行われます。
この断続的な問題が発生し、新しいスレッドで次の例外が発生することがあります。
[System.Threading.ThreadAbortException] = {コードが最適化されているか、ネイティブフレームが呼び出しスタックの最上位にあるため、式を評価できません。}
デバッグ時に、スタック内のすべてのプロパティに「コードが最適化されているか、ネイティブフレームが呼び出しスタックの上にあるため、式を評価できません」と表示されているため、これ以上の情報を取得できません。
インターネットで解決策を探していると、これはresponse.redirectを実行するときに発生する問題であることがわかりましたが、コードではこれを実行していません。デバッグしようとすると、このエラーが発生する場所に一貫性がありません。以下は、ファクトリを作成して新しいスレッドを開始するために使用するコードです。
なぜこのエラーが発生するのかについてのポインタと、それを修正する方法についてのヒントはありますか?