2013-03-22 46 views
13

文字列を返す関数で非同期操作をいくつか試行しています。Await/async参照エラー

async private void button1_Click(object sender, EventArgs e) 
{ 
    string output = await thr_calc(this, null); 
} 

async private Task<string> thr_calc(object sender, EventArgs e) 
{ 
    return await zzztest();    
} 

string zzztest() 
{ 
    string asd; 
    //some stuff here 
    return asd; 
} 

しかし、それぞれの文字列にエラーが表示されますが、これにはasync/awaitという単語が含まれています。私はWindowsデスクトップのためのms対rsの2012年のロシアのバージョンを使用しているので、ここではエラーの翻訳です:

'async'修飾子で必要なすべてのタイプが見つかりません。間違ったフレームワークバージョンをターゲットにしていますか、アセンブリへの参照がありませんか?

そして2エラー:

定義済みの型 'System.Runtime.CompilerServices.IAsyncStateMachine' が定義またはインポートされていない私は、その参照を見つけるカント

。私は以前にasync/awaitを使用しようとしましたが、それはうまくいきました。今はすべて同じことをしています。私は何が欠けているのですか?

thr_calcで
+0

ロシア語のコピー貼り付けエラーを教えてもらえますか? –

+1

フレームワーク4.5を使用していますか? –

+0

yes、framework 4.5 –

答えて

16
  • は、使用:

    return zzztest() 
    
  • また
  • 、あなたがネット4.5以降(つまり、 "非同期" を導入されたときです)

使用するようにプロジェクトを設定していることを確認してください
+0

ええ、エラーは同じです –

+3

それは私のためにコンパイルするので、それは奇妙です。 "アプリケーション"の下でプロジェクトのプロパティの下でフレームワークが4.5であることを確認しましたか? – redtuna

+0

(私はasdに値を代入するとうまくコンパイルされますが、コンパイルエラーを修正するのに問題はないと思います) – redtuna

1

zzztestは、長時間実行される操作である場合は、バックグラウンドスレッドでそれを実行するには、この操作を行うことができます。

async private Task<string> thr_calc(object sender, EventArgs e) 
{ 
    return await Task.Run<string>(() => zzztest());    
} 

上記はあなたのコンパイルエラーも解決するはずです。

zzztestが長時間実行される操作でない場合は、await/asyncを使用しないでください。

7

.NET 4.0プロジェクトでは、NugetからMicrosoft.Bcl.Asyncパッケージをインストールすることで、「定義済みの型」System.Runtime.CompilerServices.IAsyncStateMachine 'が定義またはインポートされていません。 VSのnugetパッケージマネージャーで、 'bcl'を検索し、非同期のものをインストールします。