33

関数を非同期にしたいので、単純に追加します。asyncこのような:

public async static void something(){
}

あなたはそのreturn-typeがvoid。 returnが次のようになっているので、ブロックせずにこの関数を非同期的に呼び出したいだけです。voidso noawait必要です。

しかし、Visual Studio 2012ではこれをコンパイルすることはできません。await

関数を作るサンプルを教えてください。async使うことなくawait


1 답변


30

多分あなたは何を誤解していると思いますasyncします。警告はまさにその通りです。asyncしかし使用しないでくださいawaitどこでも、あなたの方法非同期にはなりません。これを呼び出すと、メソッド内のすべてのコードが同期的に実行されます。

また、使用しないようにしてくださいasync voidメソッドを使用すると、例外の処理が難しくなります。


  • asyncメソッド自体が非同期になるようにします。awaitメソッド内のどこか?上記のサンプルのように、私が呼び出すとsomething()、それは現在のスレッドをブロックしますか? - Eric Yin
  • はい、内部に長期実行コードがある場合something()(そしていいえawait)その後、それはスレッドをブロックします。それは警告があなたに伝えようとしているものです。 - svick
  • asyncあなたの方法が魔法のようにブロックされないようにするものではありません。他のスレッドでコードを実行したい場合は、Task.Run()。 - svick
  • ああ、それを手に入れた、私はコンサートを誤解し、非同期マークメソッドが非同期呼び出しを使用しようとしているそれ自体が非同期であることを意味しません。 - Eric Yin
  • それからあなたは使うことができますTask.Run()別のスレッドで実行する - svick

リンクされた質問


関連する質問

最近の質問