私はそれを呼び出すと非同期的に '非同期タスク'メソッドを使用するメソッドを実行することができたと思うが、ブロックされ、実際には同期的に実行されます。'async Task'キーワードを非同期的に使用するメソッドを実行するにはどうすればよいですか?
static void Main(string[] args)
{
asyncTest();// use asyncTest.Wait() help nothing.
Console.ReadKey();
}
static async Task asyncTest()
{
Console.WriteLine("before init task second " + DateTime.Now.Second);
var t1 = getInt1S();// I supposed it to run background,but it blocked
var t3 = getInt3S();
//var await1 = await t1;//this line just no use, run quickly
//var await3 = await t3;//this line just no use, run quickly
Console.WriteLine("after init task second " + DateTime.Now.Second);
}
static async Task<int> getInt1S()
{
Console.WriteLine("getInt1S" + DateTime.Now.Second);
Task.Delay(1000).Wait();
return 1;
}
static async Task<int> getInt3S()
{
Console.WriteLine("getInt3S" + DateTime.Now.Second);
Thread.Sleep(3000);
return 3;
}
のような出力:
before init task second 21
getInt1S 21
getInt3S 22
after init task second 25
はなぜ 'getInt1S()' と 'getInt3Sを待つには、()' すべて同期的に実行しますか?以下のようにコーディングする方法はあります:
var a = methodSync();//method define like: async Task<T> methodSync()
Console.Write("");//do something during processing the methodSync
T b = await a;
私は私の「T1」と「T2」はで非同期に実行させるためにどのようConsoleApp.Justに「)(非同期methodSync」を使用する方法を見つけるつもりはありません'asyncTest()'。
私はのawait /非同期に取り組んでいますので、私は何かを見つけたいが '=新しいタスク(()=> {返す1;})のvar A' と異なる
コールasyncTestの方法を実行します()問題?または私が逃した何か?
私を助けることができる人は誰ですか?私のエラーを指摘する。
ありがとうございました。
コンパイラは 'await'を使用しないので、' async'メソッドが同期して実行されることを警告します。私は参考になるかもしれない[非同期チュートリアル](http://blog.stephencleary.com/2012/02/async-and-await.html)を持っています。 –
[コンソールアプリケーションの[Main]メソッドで 'async'修飾子を指定できません](http://stackoverflow.com/questions/9208921/cant-specify-the-async-modifier-on-コンソールメソッドのメインメソッド) – Eris