Task C#

Task 在C#中表示一个异步操作。

作为一个方法的返回类型时通常与async同时出现;而async又与await正好是一对。

Task 实例可以用各种不同的方式创建。 最常见的方法是使用任务的 Factory 属性检索可用来创建用于多个用途的TaskFactory实例。 例如,要创建运行操作的 Task,可以使用工厂的StartNew方法:Task.Factory.StartNew(Action) ;.net 4.5又添加了Task.Run(Action) 想了解更多 请猛戳 这里 有更多示例代码。

通常通过上面两个方法实例的Task已经开始运行,但是它不一定是新起一个线程,而是去查找闲置线程并在此闲置的线程上去运行。

 static async Task T2()
        {
            var t1 = T1();
            var t2 = Task.Run(delegate {
                for (int i = 1111; i < 2000; i++)
                {
                    Console.WriteLine(i);
                }
            });
            await t1;
            await t2;
        }

        static async Task T1()
        {
            await Task.Run(delegate {
                for (int i = 0; i < 1000; i++)
                {
                    Console.WriteLine(i);
                }
            });
        }

如上代码,当我们直接调用T2方法的时候 运行到var t1=T1();时已经将T1里面的任务加入到执行队列中去;可能不会马上执行,因为它还要去寻找闲置的线程。

运行到var t2=Task....(省略)时同样只是将其中的任务加入到执行队列中去,它们的任务可能是放在不同的线程中去运行的。然后再通过await去等待确定它们都执行完成。

都完成后再回到主线程(主线程只是指T2方法执行的线程)中来;

下面其实跟Task就没有直接关系了

图片中的提示可以看出,一个异步方法 在await Task 之前其实仍然是在进行同步运行的(可能不是很明显,但是我写过测试确实如此);只有在遇到了await Task的时候再将运行的任务异步操作。

小结

我最讨厌小结、总结什么的了。

时间: 2024-10-19 21:00:35

Task C#的相关文章

Conductor Task Workers

由远程worker执行的conductor任务通过HTTP端点进行通信以轮询任务并更新执行状态. conductor提供了轮询任务的框架,管理执行线程并将执行状态更新回服务器.该框架提供了Java和Python中的库.可以通过使用用于任务管理的HTTP端点来添加其他语言支持. Java 实现Worker接口来实现任务.https://github.com/Netflix/conductor/blob/dev/client/src/main/java/com/netflix/conductor/c

C#,Task

1.Task.Run(); static void Main(string[] args) { long a = 9876545678, b = 987654567892; Task task = Task.Run(() => { Add(a, b); }); Console.ReadLine(); } static void Add(long a,long b) { Console.WriteLine("This is the Add method!"); Console.Wr

MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考

我们知道,MapReduce有三层调度模型,即Job-->Task-->TaskAttempt,并且: 1.通常一个Job存在多个Task,这些Task总共有Map Task和Redcue Task两种大的类型(为简化描述,Map-Only作业.JobSetup Task等复杂的情况这里不做考虑): 2.每个Task可以尝试运行1-n此,而且通常很多情况下都是1次,只有当开启了推测执行原理且存在拖后腿Task,或者Task之前执行失败时,Task才执行多次. 而TaskImpl中存在一个成员变

实现基于Task的异步模式

返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编译器会使用TAP执行必要的转换从而异步地实现方法.这样的方法应该返回Task或者Task<TResult>类型.在后者的案例中,方法体应该返回一个TResult,且编译器将确保通过返回的Task<TResult>是可利用的.相似地,方法体内未经处理的异常会被封送到输出的task,造成返

基础总结篇之三:Activity的task相关

古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示子聿(yù)> 软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物.今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有所提升,仍需我们去实践,去实践. 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大家介绍一下.task是一个具有栈结

哈理工2015暑假训练赛BNU16488 Easy Task(简单题)

A - Easy Task Time Limit:2000MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu SubmitStatusPracticeZOJ 2969 Description Calculating the derivation of a polynomial is an easy task. Given a function f(x) , we use (f(x))' to denote its derivatio

Android Studio 中 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task &#39;:compileDebugAidl&#39;.的问题解答

Android Studio 中 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileDebugAidl'.的问题解答 完整的问题提示 Gradle: FAILURE:Build failed with an exception.*What went wrong:Execution failed for task ':compileDebugAidl'.>No

HDU 4864 Task(2014多校--贪心)

Task 比赛当时思路想的差不多,感觉能过的,该处理的也都处理到了,最后还是没过,可能是二分写错了吧-.- 大意:给你n个机器,m个要完成的任务,每个机器跟任务都有两个属性,机器是最大工作时间跟等级,任务是需要工作的时间跟等级.完成一个任务可以得到500*(工作时间)+2*(等级)的报酬.完成任务的条件是机器的工作时间满足任务的需要,等级要大于等于任务的等级,一个机器只能用一次,一个任务也只能用一个机器去完成.需要进行策略选择,使得完成更多的任务. 思路:开始想的就是贪心,也想到了贪心的时候时间

HDU 4864(多校)1004 Task

Problem Description Today the company has m tasks to complete. The ith task need xi minutes to complete. Meanwhile, this task has a difficulty level yi. The machine whose level below this task's level yi cannot complete this task. If the company comp

hdu 4869 Task(贪心)

题目链接:hdu 4869 Task 题目大意:有n台机器,m个任务,每个机器和任务都有有xi和yi,要求机器的xi,yi均大于等于任务的xi和yi才能执行任务.每台机器一天只能执行一个任务.要求完成的任务数尽量多,并且说金额尽量大.完成每个任务的金额为xi?500+yi?2 解题思路:贪心,mach[i][j]表示等级为i,时间为j的机器数量,task[i][j]表示等级为i,时间为j的机器数量.每次优先减少i,因为对应等级减少100,对应的金额代价也不会减少超过500(即时间减少1). 每次