2:C#TPL探秘

简介: 理论:1、 只要方法是 Task类型的返回值,都可以用 await 来等待调用获取返回值。2、 如果一个返回 Task类型的方法被标记了 async,那么只要方法内部直接 return T 这个 类型的实例就可以。

理论:

1、 只要方法是 Task类型的返回值,都可以用 await 来等待调用获取返回值。

2、 如果一个返回 Task类型的方法被标记了 async,那么只要方法内部直接 return T 这个 类型的实例就可以。

3、 一个返回 Task类型的方法没有被标记了 async,那么需要方法内部直接 Task 实例。

实践(自己添加一个按钮):

private async void button1_Click(object sender, EventArgs e)
        {
            #region 方法一:
            //string i1 = await F1Async();//保证异步任务执行完
            //MessageBox.Show("i1=" + i1);
            //string i2 = await F2Async();
            //MessageBox.Show("i2=" + i2);
            #endregion

            #region 方法二:
            Task<string> task1 = F1Async();
            Task<string> task2 = F2Async();
            string i1 = await task1;//这里保证task1的任务一定执行完,并不是这里才执行异步任务。
            MessageBox.Show("i2=" + i1);
            string i2 = await task2;
            MessageBox.Show("i2=" + i2);
            #endregion
        }
        static Task<string> F1Async()
        {
            MessageBox.Show("F1 Start");
            return Task.Run(() =>
            {
                System.Threading.Thread.Sleep(1000);
                MessageBox.Show("F1 Run");
                return "F1";
            });
        }
        static Task<string> F2Async()
        {
            MessageBox.Show("F2 Start");
            return Task.Run(() =>
            {
                System.Threading.Thread.Sleep(2000);
                MessageBox.Show("F2 Run");
                return "F2";
            });

        }
View Code

 

目录
打赏
0
0
0
0
1
分享
相关文章
技术笔记:TPL详解、使用
技术笔记:TPL详解、使用
147 0
bootstrap fileinput插件使用感悟
bootstrap fileinput 的填坑感悟              这个插件在demo的网站地址http://plugins.krajee.com/file-preview-icons-demo;不得不承认这个插件很强大,作为一个文件上传插件做到了预览,而且还支持国际化,但是唯一的缺点就是api烂的到极点(应该说没有API)。
2769 0
非常适合新手的jq/zepto源码分析01
(function(global, factory) { // 查看这里是不是定义成模块,如果定义模块就返回 一个模块 if (typeof define === 'function' && define.
1120 0
非常适合新手的jq/zepto源码分析03
zepto.fragment = function(html, name, properties) { var dom, nodes, container // 如果是简单的标签 $1 = div / p       // 创建节点 if (singleTagRE.
861 0
非常适合新手的jq/zepto源码分析04
$.extend = function(target){ var deep, args = slice.call(arguments, 1) if (typeof target == 'boolean') { deep = target target = args.
760 0
非常适合新手的jq/zepto源码分析02
function isPlainObject(obj) { return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.
746 0
非常适合新手的jq/zepto源码分析05
zepto的原型  $.fn  属性: constructor              //构造行数 forEach: emptyArray.forEach,    //都是原生数组的函数reduce: emptyArray.
919 0
非常适合新手的jq/zepto源码分析06 -- 事件模型
复习下事件的有关内容: 1.现在用的绑定/删除:   obj.addEventListener(type,fn,false)     obj.removeEventListener(type)   obj.attachEvent(type,fn)   //ie   obj.detachEvent(type) 2.js的event对象   type : 事件类型   srcElement/target :  事件源   button : 如果是鼠标按下,则 1左键 2右键 4中间滚轮 多个键则相加按下的所有值。
854 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等