タグ付けされた質問 「task」

タスクは、並行性を処理するために使用される抽象概念であり、プログラムの残りの部分と同時に実行される操作を表すことができます。タスクは、Adaでの同時実行スレッドであり、.NETでの非同期操作を表します。これは、Javaのスレッドにも対応しています。

5
「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告について心配する必要があります。
私はいくつかの非同期メソッドを公開するインターフェースを持っています。より具体的には、TaskまたはTask <T>のいずれかを返すメソッドが定義されています。async / awaitキーワードを使用しています。 私はこのインターフェースを実装している最中です。ただし、これらのメソッドの一部では、この実装には何も待つ必要がありません。そのため、コンパイラの警告「この非同期メソッドには「await」演算子がなく、同期的に実行されます...」という警告が表示されます。 エラーが発生する理由は理解していますが、このコンテキストでそれらについて何かを行う必要があるかどうか疑問に思っています。コンパイラの警告を無視するのは間違っていると感じます。 Task.Runを待つことで修正できることはわかっていますが、安価な操作を数回しか実行していないメソッドでは、それは間違っていると感じます。また、実行に不要なオーバーヘッドが追加されるように聞こえますが、asyncキーワードが存在するため、それがすでに存在するかどうかもわかりません。 警告を無視する必要がありますか、それとも私が見ないこれを回避する方法はありますか?

4
Platform.runLaterとJavaFXのタスク
私はこれについていくつかの研究を行ってきましたが、控えめに言ってもまだ非常に混乱しています。 Taskいつ使用するPlatform.runLater(Runnable);か、いつ使用するかについて具体的な例を教えてもらえますか?違いは正確には何ですか?これらのいずれかをいつ使用するかについての黄金律はありますか? また、私が間違っている場合は訂正してください。ただし、これら2つの「オブジェクト」は、GUIのメインスレッド内に別のスレッドを作成する方法ではありませんか(GUIの更新に使用されます)。

7
Task.Run with Parameter(s)?
私はマルチタスクネットワークプロジェクトに取り組んでおり、は初めてですThreading.Tasks。シンプルなものを実装しましたが、Task.Factory.StartNew()どうすればそれができるのでしょうか。Task.Run()でしょうか? 基本的なコードは次のとおりです。 Task.Factory.StartNew(new Action<object>( (x) => { // Do something with 'x' }), rawData); オブジェクトブラウザを調べましSystem.Threading.Tasks.Taskたが、同様のパラメータが見つかりませんでした。パラメータを取るものだけがあり、タイプはありません。Action<T>Actionvoid そこ似唯一の2つのことは、次のとおりstatic Task Run(Action action)とstatic Task Run(Func<Task> function)が、両方とポストパラメータ(複数可)することはできません。 はい、私はそれのための簡単な拡張メソッドを作成できることを知っていますが、私の主な質問は、それを1行で書くことができるTask.Run()かどうかです。

6
タスクの同期継続を防ぐにはどうすればよいですか?
にTask基づいて、リクエストへの保留中の応答にベースのAPIを提供するライブラリ(ソケットネットワーク)コードがありますTaskCompletionSource<T>。ただし、同期継続を防ぐことは不可能であるように思われるという点で、TPLには煩わしさがあります。私はなりたいと行うことができるようにすることのいずれかです: TaskCompletionSource<T>発信者が、、TaskContinuationOptions.ExecuteSynchronouslyまたはで接続することを許可してはならないことを伝えます 代わりにプールを使用して、無視する必要があることを指定する方法で結果(SetResult/ TrySetResult)を設定しTaskContinuationOptions.ExecuteSynchronouslyます 具体的には、私が抱えている問題は、受信データが専用のリーダーによって処理されており、発信者が接続できる場合TaskContinuationOptions.ExecuteSynchronously、リーダーをストールさせる可能性があることです(これはそれらだけに影響を与えるだけではありません)。以前、私はかどうかを検出することをいくつかの牛車でこれを回避働いている任意の継続が存在し、それらがある場合、それはへの完了を押してThreadPool完了が処理されませうとして、発信者が、自分の仕事のキューを飽和している場合は、しかし、これは重大な影響を持っていますタイムリーに。彼らが使用しているTask.Wait()(または同様の)場合、彼らは本質的に彼ら自身をデッドロックさせます。同様に、これが、リーダーがワーカーを使用するのではなく、専用のスレッドを使用している理由です。 そう; TPLチームを悩ませる前に:オプションがありませんか? キーポイント: 外部の発信者が自分のスレッドを乗っ取れるようにしたくない ThreadPoolプールが飽和状態のときに機能する必要があるため、実装として使用することはできません 以下の例では、出力が生成されます(順序はタイミングによって異なる場合があります)。 Continuation on: Main thread Press [return] Continuation on: Thread pool 問題は、ランダムな呼び出し元が「メインスレッド」で継続を取得できたという事実です。実際のコードでは、これはプライマリリーダーを中断します。悪いこと! コード: using System; using System.Threading; using System.Threading.Tasks; static class Program { static void Identify() { var thread = Thread.CurrentThread; string name = thread.IsThreadPoolThread ? "Thread pool" : thread.Name; …

7
Railsでデータベースをシードする最良の方法は何ですか?
Railsアプリに初期データを入力するrakeタスクがあります。たとえば、国、州、携帯電話会社など。 私が今それを設定している方法は、/ db / fixtures内のファイルにたくさんのcreateステートメントとそれらを処理するrakeタスクがあることです。たとえば、私が持っているモデルの1つはテーマです。/ db / fixturesに次のようなtheme.rbファイルがあります。 Theme.delete_all Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222', :component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000', :join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF', :cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true) Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF', :component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF', :join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000', :cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true) Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', …

3
別のタスクを待つ開始されていないタスクを宣言する方法は?
私はこの単体テストを実行しましたが、「await Task.Delay()」が待機しない理由がわかりません! [TestMethod] public async Task SimpleTest() { bool isOK = false; Task myTask = new Task(async () => { Console.WriteLine("Task.BeforeDelay"); await Task.Delay(1000); Console.WriteLine("Task.AfterDelay"); isOK = true; Console.WriteLine("Task.Ended"); }); Console.WriteLine("Main.BeforeStart"); myTask.Start(); Console.WriteLine("Main.AfterStart"); await myTask; Console.WriteLine("Main.AfterAwait"); Assert.IsTrue(isOK, "OK"); } ユニットテストの出力は次のとおりです。 これはどのようにして「待機」が待機せず、メインスレッドが継続するのでしょうか。

1
なぜTask.Run()がUIスレッド/オリジンコンテキストに同期するのを待たないのですか?
非同期待ちのパターンとTask.Run動作は理解できたと思いました。 しかし、次のコード例でawait、完了したタスクから戻った後、なぜUIスレッドに同期しないのかと思います。 public async Task InitializeAsync() { Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // "Thread: 1" double value = await Task.Run(() => { Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // Thread: 6 // Do some CPU expensive stuff double x = 42; for (int i = 0; i < 100000000; i++) { x += i - Math.PI; } …

2
awaitを使用することと、非同期タスクを処理するときにContinueWithを使用することとの違いは何ですか?
これが私の意味です: public Task<SomeObject> GetSomeObjectByTokenAsync(int id) { string token = repository.GetTokenById(id); if (string.IsNullOrEmpty(token)) { return Task.FromResult(new SomeObject() { IsAuthorized = false }); } else { return repository.GetSomeObjectByTokenAsync(token).ContinueWith(t => { t.Result.IsAuthorized = true; return t.Result; }); } } 上記の方法は待つことができますが、T askベースのA同期P atternが提案することとよく似ていると思いますか?(私が知っている他のパターンはAPMおよびEAPパターンです。) では、次のコードはどうでしょう。 public async Task<SomeObject> GetSomeObjectByToken(int id) { string token = repository.GetTokenById(id); …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.