問題タブ [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# - タスクを返す Web Api メソッドの欠点
Task<T>
Visual Studio で新しい Web Api コントローラーを作成するときに取得するメソッドで、Web Api メソッドからa を返す方法が既定ではないのはなぜですか?
これを行うことの欠点はありますか?
vb.net - Windows サービスとタスク ファクトリ
メソッドごとに異なるタイマーを使用して、異なる時間間隔で異なるメソッドが実行されるWindowsサービスを開発した経験があります。しかし、私は最近、System.Threading.Tasks と ManualResetEvent を使用して同じことを行う 1 つの Windows サービスに出くわしました。私はこれらについてあまり知識がありません。以下は、Windows サービスの作成方法を示すコードです。onstart と実行されるメソッドのみを含めました。コンソール アプリケーションをチェックインしましたが、waitone が原因でタスクがブロックされません。しかし、私が言ったように、タスクの技術的な知識はあまりないので、さまざまなメソッドがさまざまな間隔で実行されるウィンドウサービスに対して、次のアプローチが正しいか間違っているかについて意見が必要です。
c# - Task.Factory.StartNew にはラムダ/アクションが必要ですか?
期待どおりに動作していなかった製品コードを修正しました。C# で記述された .NET 4.5.1 の Windows サービスについて話しています。修正されていますが、何が起こったのか理解しようとしています。一部のグーグルは、これについてあまり結果を示しませんでした。次のようにタスクが開始されました。
私の知る限り、スレッドと同様に、StartNew は実行するメソッドへの参照を受け取ります。これはデバッグ環境では機能しますが、本番環境 (リリース) では機能しません。次のようにしました。
ここで何が欠けていますか?コードはまったく実行されないように最適化されていますか?
要求に応じて、タスク メソッドの本体:
これまでのところ、例外はログに記録されておらず、サービスは実行されていました。Task.Factory.StartNew(this.SendReminders) 行を使用しても本番環境では起動しませんでしたが、ラムダを使用すると魅力的に機能しました。
私は SimpleInjector を使用しており、UnitOfWork は Entity Framework 6.0.2 によってサポートされています。タスクを開始するメソッドは、メイン スレッドのタイマーによってトリガーされています。
c# - Taskfactory クラスを使用して複数のタスクを並行して作成するにはどうすればよいですか?
TaskFactory クラスを使用して、最大 5 スレッドまで、処理中の保留中の transactionId ごとに 1 つずつ、複数のタスクを並行して作成しようとしています。各タスクにキャンセル トークンを渡す必要があります。私は正しい軌道に乗っていますか?非同期を実行するのと同期を実行するにはどうすればよいですか? 私は次のものを持っています:
c# - Task.Factory.StartNew() が IIS7 でアクションを実行しないのはなぜですか?
.ASP.NET WebForms .NET 4.0 コードを実行している Windows Server 2008 R2 IIS 7 インスタンスがあります。ポストバックには、実行時間の長いプロセスを実行するスレッド スポーンがあります。
以下のコードは IIS7 では動作しません。Cassini の下でローカルに、および利用可能な別の Windows Server 2003 IIS6 インスタンスで正常に動作します。
これにより、サーバーに関係なく、「例外なし」および「isfaulted=false」および「iscompleted=true」が記録されます。
ProcessWorkItem
ただし、 IIS6 または Cassini ローカル開発サーバーでは問題なくヒットしますが、IIS7 ではヒットしない .log ファイル内にもログ ステートメントがあります。
それはなぜでしょうか?
c# - 大きな読み取り専用リストを共有するにはどうすればよいですか各 Task.Factory.StartNew() メソッドで
という名前のカスタム クラスがTerms
あり、そのクラスに多数の文字列プロパティが含まれているとします。次に、かなり大きな (たとえば 50,000)List<Terms>
オブジェクトを作成します。これList<Terms>
は読み取る必要があるだけですが、 の複数のインスタンスから読み取る必要がありますTask.Factory.StartNew
(インスタンスの数は 1 から 100 までさまざまです)。
そのリストを長時間実行タスクに渡すにはどうすればよいですか? これは、十分なメモリを備えた特定のサーバーでの特定の用途向けのカスタム アプリケーションであるため、メモリはそれほど重要ではありません。それを参照する必要がありますか、それとも通常の引数として作業を行うメソッドに渡す必要がありますか?
asp.net-mvc - 内部のメソッドに新しいパラメーターがある場合、Task.Factory.StartNew が開始されない
(問題は解決しました)アクションにMVCアプリケーションがあります:
最初のケース: タスクが開始されていません。
2 番目のケース: タスクは正常に実行されます
私の質問は: Task.Factory.StartNew と私がそれにメソッドを入れるとき、そのメソッド (オブジェクト) のパラメータは外部で宣言する必要がありますか??? 最初のケースのように短く書くと、パラメーターに「new」キーワードを入れて、タスクが実行されないためです。理由: 実際には、できるだけ早くビューを返したいのですが、そのビューに関連しない他のものはタスクで実行され、クライアントは完了を待つ必要はありません。
私は私の悪い英語について非常に申し訳ありません:)
更新 1 : Panagiotis Kanavosに感謝します。QueueBackgroundWorkItemを使用しましたが、問題は同じです。オブジェクトを外部で宣言すると、このメソッドは正常に実行されます。しかし、パラメーター内で新しいキーワードを使用すると、このメソッドは実行されません。例外もエラーもありません。これがどのように可能かを誰かに説明してもらえますか:(
更新 2 : 私は 2 つのケースを試します:
初め:
2番:
では、ここで問題はどこにありますか?私がコピーしたので、それはm_bussinessHandlerについてではありません。
更新 3 : 理由がわかりました。理由は UserModel.Current です。これは のオブジェクトですHttpContext.Current.Session["UserModel"]
。この場合、非同期メソッドを呼び出すと、このメソッドが実際に実行されると、null である HttpContext.Current にアクセスできます。したがって、データを保存するオブジェクトを外部で宣言してメソッドに渡すか、UserModel.Current をキャプチャしてこのメソッドに渡して UserModel.Current.UserId を使用することで、この問題を解決できます。
私の問題は実際に解決しました。私を助けてくれた皆さん、特にPanagiotis Kanavosに感謝します。
c# - for ループで TaskFactory StartNew を使用する場合、ループ インデックス値に依存できません
TaskFactory を使用して for ループで新しいタスクを開始するときは、現在のループ インデックスをパラメーターとして、タスクを開始するラムダ関数に渡します。このインデックスは、リストからアイテムを選択し、アイテムのワーカー関数を呼び出すために使用されます。ワーカー タスクに確実に渡されるインデックスの値に依存できないようです。
以下のコードを実行すると、コンソール出力で、一部のワーカーが開始されず、一致する数の他のワーカーが少なくとも 2 回開始されたことが明らかになります。次のようになります。
これは、ループ インデックス値のコピーを取り、これをワーカー関数に渡すことで「解決」できます (これは、Manager RunWorkers 関数でコメント化されたビットです)。これにより、次のような期待される結果が得られます。
この動作を理解して、適切に防御できるようにしたいと思います(私は愚かなことをしたと思います。「修正」は問題を隠すだけで、信頼できません)
ところで - Manager RunOne 関数でガードを削除すると、インデックスが大きすぎるため、ArgumentOutOfRange 例外が発生する可能性があります。
以下に C# コンソール アプリ (Visual Studio 2013) のコードを含めました。
それからマネージャー
最後にプログラム自体