C# async / await
1. await只能出现在async修饰的方法中
2.async不能修饰main函数
3.async修饰的方法,用普通方式调用时表现为异步执行,配合await时将变成同步执行
4. The return type of an async method must be void, Task or Task<T>
http://blogs.msdn.com/b/pfxteam/archive/2012/04/12/10293335.aspx
http://msdn.microsoft.com/zh-cn/library/hh191443.aspx
[TestMethod] public void AsyncWait() { System.Diagnostics.Debug.WriteLine("main threadid:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()); var t=a(); //t.Wait(); System.Diagnostics.Debug.WriteLine("main after a"); } //private int a() //{ // //System.Threading.Thread.Sleep(1000 *20 ); // for(int i=0;i<20;i++) // System.Threading.Tasks.Task.Run( // ()=>{ // System.Diagnostics.Debug.WriteLine("i:" + i.ToString() + " a threadid:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()); // } // ); // return 0; //} private async System.Threading.Tasks.Task<int> a() { //can't await anonymous function //await delegate(){ // return 1; //}; /*=>{ System.Threading.Thread.Sleep(1000 * 20); return 0; };*/ for (int i = 0; i < 20; i++) { //await System.Threading.Tasks.Task.Run( // () => // { // System.Diagnostics.Debug.WriteLine("i:" + i.ToString() + " a threadid:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()); // } //); await System.Threading.Tasks.Task.Factory.StartNew( () => { System.Diagnostics.Debug.WriteLine("i:" + i.ToString() + " a threadid:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()); } ); } return 0; }