関数を呼び出して、C#で待機しない


26

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

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

アドバイスをください。



それを行う唯一の方法は、別のスレッドに渡すことです。単に操作を行わない場合を除き、リソースなしで関数を呼び出すようなことはありません。
ロバートハーベイ

おかげで、私は最良で最適化された方法を意味しました。最良の方法はTask.Runであり、言及された@ user814064のリンクに基づいてMVCでWebApiを使用すると思いますが、おそらくJavaScriptソリューションを使用できますが、そうではないと思いますプロ!
user2675751

回答:


40
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.プロセスがクラッシュします。それをしないでください。


3
「3.プロセスをクラッシュさせます。それをしないでください」を展開してください。これは自動的に行われませんか?
ルダン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.