問題タブ [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 - TaskFactory.StartNew 対 ThreadPool.QueueUserWorkItem
どうやら、.NET 4.0 のメソッドは(この投稿によるととにかくTaskFactory.StartNew
)の代替として意図されているようです。私の質問は簡単です。理由を知っている人はいますか?ThreadPool.QueueUserWorkItem
TaskFactory.StartNew
より良いパフォーマンスがありますか?メモリ使用量が少ないですか?それとも、主にTask
クラスによって提供される追加機能のためですか? 後者の場合、よりもパフォーマンスが悪いStartNew
可能性がありますか?QueueUserWorkItem
呼び出しごとにオブジェクトを返すため、実際には よりも多くのメモリをStartNew
使用する可能性があるように思えます。これにより、より多くのメモリが割り当てられると予想されます。QueueUserWorkItem
Task
いずれにせよ、どちらが高性能シナリオにより適しているか知りたいです。
c# - Task.Factory.StartNewスレッドの優先度を下げる
以下のようなコードは、ジョブを実行するための新しいスレッドを開始します。そのスレッドの優先度を制御する方法はありますか?
.net - タスクの優先機能を追加する方法
画像圧縮サービスにタスクライブラリを使用しています。多くのファイルの同時実行性を圧縮します。しかし、私はユーザーがアイドル状態のとき(またはプログラムでこれ以上重要なタスクがないとき)にのみサービスを実行したいと思っています。
threadPoolは「スレッド優先度の変更」機能をサポートしていないことを知っているので、タスクもこの機能をサポートしています。
その機能をより高いレベルの制御で開発できますか?(たとえば、TaskSchedulerの優先順位)
c# - Task.Factory.StartNew「アクション」引数と上位レベルのローカル変数
このことを考慮:
さて、私の質問:StartNewメソッドに2番目のパラメーターとして渡す代わりに、ラムダ式内でdataRequestを使用できますか?私の懸念は、そのメソッドが別のスレッドで実行されることであり、dataRequestがそこで使用されたときにその状態を維持するかどうかはわかりません。
c#-4.0 - TPLTaskFactory.FromAsyncとブロッキングメソッドを使用したタスク
TaskFactory.FromAsync
TPLを使用TaskFactory.StartNew
することと、メソッドのブロックバージョンを使用することの間にパフォーマンスへの影響があるかどうか疑問に思いました。100以下の同時接続をサポートするTCPサーバーを作成しています。最初のオプションでコードを記述し、続行を使用して複数の読み取りおよび書き込み操作を連鎖させた後、私は醜い、デバッグが難しいコードを残されました。
同期バージョンでコードを記述し、それをタスクでラップすると、複雑さが軽減され、テスト容易性が向上すると思いますが、これを行うことによるパフォーマンスへの影響が心配です。
たとえば、これら2つの呼び出しの間にパフォーマンスの違いはありますか。
wpf - サービスで WPF FormattedText "指定されたファイルが見つかりません" という例外が発生しました
RSS フィードから最新のニュース ヘッドラインを取得するサービスで、WPF FormattedText オブジェクトを使用してテキスト サイズを決定します。取得するテキストは、指定されたキャンバス サイズである必要があります。サービスは 10 秒ごとにコードを実行し、それよりも時間がかかる場合は最大 2 つのスレッドを使用します。私は TaskFactory を使用しています (指定したスレッドの量に制限するために LimitedConcurrencyLevelTaskScheduler をオーバーライドしました)。
これはうまく機能しますが、数日後 (長さは可変)、次の例外が発生し始めます。TPL を使用してマルチスレッド化する前は、同じコードが正常に機能していました。
これが何によって引き起こされているのかを理解する助けが必要です。私が調べているいくつかの考えは次のとおりです: TTF ファイルに保持されているスレッドの衝突、メモリの問題、ディスパッチャ (スタック トレースを参照) が TaskFactory とうまく連携していない、その他?? プロファイリングのセットアップは適切ではありませんが、例外が発生しているときにタスク マネージャーを調べたところ、メモリ使用量は正常に見えました。私の次の試みは、TextBlock オブジェクトを使用して、例外が回避されるかどうかを確認することです。
エラー メッセージ: 指定されたファイルが見つかりません エラー ソース: WindowsBase エラー ターゲット サイト: UInt16 RegisterClassEx(WNDCLASSEX_D)
例外スタック トレース:
MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d) で MS.Win32.HwndWrapper..ctor(Int32 classStyle、Int32 スタイル、Int32 exStyle、Int32 x、Int32 y、Int32 幅、Int32 高さ、文字列名、IntPtr 親、HwndWrapperHook [] フック) で System.Windows.Threading.Dispatcher..ctor() で System.Windows.Threading.Dispatcher.get_CurrentDispatcher() で System.Windows.Media.TextFormatting.TextFormatter.FromCurrentDispatcher(TextFormattingMode textFormattingMode) で System.Windows. Media.FormattedText.LineEnumerator..ctor(FormattedText text) で System.Windows.Media.FormattedText.DrawAndCalculateMetrics(DrawingContext dc, Point drawingOffset, Boolean getBlackBoxMetrics) で System.Windows.Media.FormattedText.get_Metrics() で (ループ内の FormattedText)
編集:これまでのところ、この関数を呼び出すコードの周りにロックを配置し、次のように CurrentDispatcher.Invoke メソッド内で呼び出すことを試みました。
編集: 他の人へのリンクを見つけましたが、正確な問題ではありません。 http://www.eggheadcafe.com/software/aspnet/31783898/problem-creating-an-bitmapsource-from-an-hbitmap-in-threaded-code.aspx ~同様の問題がありますが、回答はありません
System.Windows.Media.DrawingVisual.RenderOpen() しばらくするとエラーが発生します ~ 同様の問題がありますが、回答はありません
http://connect.microsoft.com/VisualStudio/feedback/details/361469/net-3-5-sp1-breaks-use-of-wpf-under-iis# ~ 同様の例外ですが、3.5SP1 は使用していませんまたはIIS 7。
Microsoft Connect サイトからもこれを送信しました (同様の問題が発生している場合は、投票してください)。 https://connect.microsoft.com/WPF/feedback/details/654208/wpf-formattedtext-the-system-cannot-find-the-file-specified-exception-in-a-service
編集: Microsoft からの応答:「WPF オブジェクトは、スレッド プール スレッドではなく、ディスパッチャー スレッドで作成する必要があります。通常は、スレッドを専用にして、ディスパッチャー ループを実行し、オブジェクトを作成してそれらを凍結して返す要求にサービスを提供することをお勧めします。ありがとう、WPF チーム」 〜これをどのように実装しますか?
EDIT:NightDwellerのおかげで最終的な解決策
編集: 変更 (new Application();) をデプロイすると、「同じ AppDomain に複数の System.Windows.Application インスタンスを作成できません」というエラーが記録されました。エラー ソース: PresentationFramework エラー ターゲット サイト: Void .ctor()
.net - TaskFactory.FromAsync とカスタム Async プロシージャを使用してタスクを作成する方法
タスクに依存してバックグラウンド計算を実行する (ネットワーク上の場所からデータを取得する) いくつかのクラスをテストしようとしています。このクラスは、Task の開始されていないインスタンスを取得し、ContinueWith メソッドを追加してから、Task で Start を呼び出します。このようなもの:
このクラスはインターフェイスを介して Task のインスタンスを取得するため、テストが制御する Task インスタンスを注入できます。ただし、十分に制御できるものを作成できないようです。
テストにスレッドを導入したくはありませんが、Task を非同期で動作させたいので、スレッドを使用せずに BeginInvoke/EndInvoke パターンを実装するクラスを作成し、TaskFactory.FromAsync メソッドを使用します。タスクを作成します。
アイデアは、テストがタスクを開始するクラスのメソッドを呼び出すことができ、それが返されたときにテストが結果データを Async オブジェクトに提供できるということです。これにより、同じスレッドに留まりながら操作が終了します。
ただし、そのタスクで Start を呼び出そうとすると、「null アクションのタスクでは Start を呼び出せない可能性があります」というエラーが表示されます。残念ながら、Google はそのメッセージについてあまり役に立たないので、Async オブジェクトを正しく実装していないのか、それとも TaskFactory.FromAsync を間違って使用しているのかはわかりません。これが私のNonThreadedAsyncクラスのコードと、例外で爆発するテストです:
詳細情報として、そのテストをデバッグすると、Start() を呼び出す直前に、タスク インスタンスが [ローカル] ウィンドウに次のように表示されます。
Id = 1, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
しかし、展開すると、表示されるプロパティに Method プロパティがありません。
誰かが私が間違っていることを見ることができますか?
[編集: NonThreadedAsync クラスが古典的な Begin/End パターン (または少なくとも、Begin/End パターンの理解:)) で正しく動作することを確認するテストも作成しました。これは合格です:
vb.net - タスクファクトリの例外の処理
ファイル処理を処理するための新しいタスクを作成するプロセスを設定しました。例外エラーを受け取って処理せず、続行ボタンをクリックするだけでメインプロセスが実行され続けるという問題が発生しました。また、子タスク内でファイルの競合エラーが発生し、タスクが個別の.exeとして実行されるため、すべてがスレッドセーフであるという印象を受けました。したがって、ここでの最初の問題は、メインプロセスでのタスクの作成です。GProcessは、6つのクラスで構成されるそれ自体の完全なプロジェクトです。これは、メインプロセスクラスform1へのクラスライブラリ参照として追加されます。
今私はmsdnからaggregateexceptionのものを取得し、それを実装する方法がわかりませんが、基本的に私がしたいのは、例外を引き起こしたタスクをキャンセルし、他のすべてのタスクの実行を続行し、キャンセルされたタスクが作業していたファイルをキャプチャして名前を保存することですログに記録するか、可能であれば、作業中のファイルでそのタスクを再開します。
2番目の問題では、タスクがクラスにアクセスしたときにxmlwriterが作成されます。このタスクは、独自のインスタンスを作成する必要があるため、衝突が発生した理由はわかりませんが、衝突が発生した場合は、タスク/スレッドをキャンセルするか、実行します。ファイルへのアクセスを待機します。
c# - WindowsサービスのTaskFactory
私のアプリはTaskFactoryを使用して作業を行っています。ユーザーが私のアプリのいくつかのインスタンスを起動したい場合、ユーザーがログオンすると、それをスタートアップエントリとして配置します。これを回避するために、アプリと同じ動作をする複数のスレッドを生成するサービスを作成したいと思います。TaskFactoryはThreadPoolを使用し、アプリインスタンスごとにスレッドプールが1つしかないため、パフォーマンスに影響しますか?
task-parallel-library - TaskFactory.StartNewをTask.ContinueWithと組み合わせて機能させるのはなぜですか?
TaskFactory.StartNew()は、新しいタスクを作成し、それを開始してから返します。次のコードは常に機能すると想定しても安全だと思います(MSDNから取得したため)。
これはどのように作動しますか?.ContinueWith()
呼び出される前にタスクが開始されていない(または完了していない)ことをどのように確認できますか?