自分のコードでタスクをスケジュールし、すぐにForeverRunningTaskAsyncに進みます。実行時にタスクをスケジュールしてC#で続ける
private async void button_Click(object sender, RoutedEventArgs e)
{
Task.Delay(5000).ContinueWith((t) => { StopForeverRunningTask(); }, CancellationToken.None);
await ForeverRunningTaskAsync();
}
すべての作業罰金:ForeverRunningTaskAsyncは5秒間、すでに進行中である間、この方法StopForeverRunningTaskが実行されます。しかし、コンパイラはTask.Delayコールで 'await'を逃したと警告しています。 ForeverRunningTaskAsyncは遅延の後ではなく、すぐに開始する必要があるため、私は待つ必要はありません。おそらく、タスクをスケジューリングし、後続のコードにすぐに進むより洗練された方法がありますか?または、警告を無視するだけでいいですか?
編集: StopForeverRunningTaskは実際に何かを行うことができます。答えから、私はそれのより抽象的な名前を提供する必要があります参照してください。必ずしもForeverRunningTaskの実行を停止するとは限りません。いくつかのフラグを設定したり、現在の状態を取得したりすることができます(また、ForeverRunningTaskランタイム中に複数回呼び出されることもあります)ので、CancellationTokenの使用はオプションではありません。 WaitAllのアプローチは私の質問に答えて以下の提案。
を完了するまで待つことである私が、私はなぜあなたはawait'全く '使用している、この質問を理解していませんか?あなたは 'ForeverRunningTaskAsync'の結果を使用していませんし、完了しても何もしていないのですが、これは単純に2つの異なるタスクを開始するのでしょうか? –
私はちょうどこれらの2つに焦点を合わせました(長時間実行タスクと長時間実行タスクの流れを何らかの形で制御または調べるタスク)。長期実行タスクの前後には他のタスクがあり、長期実行タスクには結果などが実際にあります。私は、重要ではない細部を脇に置くことを可能な限り単純な例にしたいと思っていました。 – Alex
@Alex: 'ContinueWith'は使用しないでください。別の 'async'メソッドを作成し、代わりに' await'を使用してください。 –