web-dev-qa-db-ja.com

関数を呼び出し、C#でそれを待たない

私のmvc4 Webアプリケーションにコントローラーがあり、別の関数を呼び出す必要があるアクションがあります。その関数で何が起こるか、つまり戻り値は私のアクションにとって重要ではありません。どのようにしてその関数を呼び出し、それが実行されるのを待てないのですか?

私はそれは非同期で実行できると思いますが、私のポイントはリソースを使用せず、関数を呼び出すだけで、何が起こるかそれを待つことはありません。

アドバイスをください。

26
user2675751
_private void Demo()
{
    // Do something, given that the result doesn't matter.
}

public void Do()
{
    Task.Factory.StartNew(this.Demo);

    // The following line will be executed without waiting for the result.
    DoSomethingElse();
}
_

結果やそれがスローする可能性のある例外を気にせずにメソッドを開始することは危険であることに注意してください。

例外がTaskでスローされた場合、次の場合まで非表示になります。

  1. 結果を観察し、
  2. タスクのWait()、または:
  3. GCはTaskのファイナライザを呼び出します。

メソッドを呼び出した直後に自分自身1.と2.を処理できます。または、元のタスクが例外をスローしたときに実行されるmyTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)で継続をアタッチできます。 3.プロセスがクラッシュします。それをしないでください。

40