请教一个.net 4.5 async 的问题??
直接上Code比较直观(稍作说明):
1:自定义Awaiter
public class DemoAwaiter : INotifyCompletion
	{
		public bool IsCompleted
		{
			get
			{
				return true;
			}
		}
		public void OnCompleted(Action continuation)
		{
			continuation();
		}
		public int GetResult()
		{
			return 1;
		}
	}
2:扩展实现对象
public static class AsyncExtensions
	{
		public static TaskAwaiter GetAwaiter(this int d)
		{
			return Task.Delay(d).GetAwaiter();
		}
		public static DemoAwaiter GetAwaiter(this DateTime time)
		{
			return new DemoAwaiter();
		}
	}
3:结果对比
public static async Task GetTaskInt()
		{
			DateTime time = DateTime.Now;
			await time;
			Console.WriteLine(123);
		}
		public static async Task GetTaskTime()
		{
			DateTime time = DateTime.Now;
			await time;
			Console.WriteLine(123);
		}
3.1:运行 GetTaskInt(); 先输出 "i am continue job" ,然后输入 "123" (预期正常异步结果)
3.2:运行 GetTaskTime() 先输入"123",然后输入 "i am continue job" (这里就是问题,
感觉没有异步执行??)
请大家看下为什么?
本人推测:会不会是task.Delay 新开启了一个线程哪?
              
------解决方案--------------------
GetAwaiter 返回TaskAwaiter可以修改await。可以执行。
------解决方案--------------------你自己实现的代码中没有使用到任何多线程的部分啊,而Task类就是对多线程操作的一个封装,Task.Delay就是多线程中的等待,因此调用那个进行等待不会阻碍当前线程,只是子线程被阻塞了。当然,这对于一般用途来说没任何意义,主要用在async修饰的方法中,由于方法本身就是多线程的情况,那么系统就会在执行同步方法的过程中,遇到多线程等待时,停止同步方法的执行,直到等待的时间过去了,才去执行后面的同步方法,但是这等待的过程不会阻塞当前线程,表现为用户界面不会卡住。