using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace await和async
{
class Program
{
static void Main(string[] args)
{
//AwaitAsync();
//TaskRun(); AwaitTaskRun(); } #region await和async
private static void AwaitAsync()
{
Say(); //由于Main不能使用async标记
Console.ReadLine();
} private async static void Say()
{
var t = TestAsync();
Thread.Sleep(); //主线程在执行一些任务
Console.WriteLine("Main Thread"); //主线程完成标记
Console.WriteLine(await t); //await 主线程等待取异步返回结果
}
static async Task<string> TestAsync()
{
return await Task.Run(() =>
{
Thread.Sleep(); //异步执行一些任务
return "Hello World"; //异步执行完成标记
});
}
#endregion #region task
public static void TaskRun()
{
Console.WriteLine("执行GetReturnResult方法前的时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
var strRes = Task.Run<string>(() => { return GetReturnResult1(); });
Console.WriteLine("执行GetReturnResult方法后的时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
Console.WriteLine("我是主线程,线程ID:" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(strRes.Result);
Console.WriteLine("得到结果后的时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss")); Console.ReadLine(); } static string GetReturnResult1()
{
Console.WriteLine("我是GetReturnResult里面的线程,线程ID:" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
return "我是返回值";
}
#endregion #region AwaitTaskRun
/*
* await:只能标记在async方法或Task对象前面;等待异步的执行结果。
* async:标记异步方法,里面有异步执行则异步,没有则为普通方法,只能返回void、Task、Task<T>
*/ public static void AwaitTaskRun()
{
Console.WriteLine("我是主线程,线程ID:{0}", Thread.CurrentThread.ManagedThreadId);
TestAsync1();
Console.ReadLine();
}
static async void TestAsync1()
{
Console.WriteLine("调用GetReturnResult()之前,线程ID:{0}。当前时间:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
var name = GetReturnResult();
Console.WriteLine("调用GetReturnResult()之后,线程ID:{0}。当前时间:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
Console.WriteLine("得到GetReturnResult()方法的结果:{0}。当前时间:{1}", await name, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss")); Console.WriteLine("最后执行,线程ID:{0}。当前时间:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
} static async Task<string> GetReturnResult()
{
Console.WriteLine("执行Task.Run之前, 线程ID:{0}", Thread.CurrentThread.ManagedThreadId);
return await Task.Run(() =>
{
Thread.Sleep();
Console.WriteLine("GetReturnResult()方法里面线程ID: {0}", Thread.CurrentThread.ManagedThreadId);
return "我是返回值";
});
} #endregion
}
}

需要等待结果执行,必须所有的方法用await,调用方法的时候也需要。

最新文章

  1. 15天玩转redis —— 第一篇 开始入手
  2. android布局学习-使用FrameLayout和LinearLayout制作QQ空间底部导航栏
  3. Django笔记-MySQL初次使用设置
  4. 2分钟 windows下sublime text 3安装git插件:
  5. CSS3选择器(一)
  6. Magento在IE下登陆不了后台,在Firefox下正常
  7. MVC5 自定义表单错误信息
  8. php和.net的DES加密解密方法
  9. Servlet添加
  10. CLR设计类型之接口
  11. 广告中的AdNetwork、AdExchange、DSP、SSP、RTB和DMP是什么?
  12. C# 模拟键盘操作SendKey(),SendKeys()
  13. [转]maven全局配置文件settings.xml详解
  14. 「loj3057」「hnoi2019」校园旅行
  15. Jmeter中Websocket协议支持包的使用
  16. 廖雪峰Java5集合-6Stack-1使用Stack
  17. HDU1875+Prim模板
  18. &lt;Android 基础(二十五)&gt; Frame Animation
  19. 10个你必须知道的jQueryMobile代码片段(转)
  20. 使用 Python 创建你自己的 Shell (上)

热门文章

  1. ffs, fls
  2. JUC源码分析-集合篇(一)ConcurrentHashMap
  3. hdu6321 /// 状压DP
  4. springboot中引用配置文件中的参数
  5. 使用PHP如何去除字符串结尾的字符
  6. easyui datagrid 绑定json对象属性的属性
  7. margin与padding
  8. Visio2016专业版永久激活码
  9. vue 外卖app(3) 引入阿里图标
  10. 解析Spring MVC上传文件