C# ado.net 使用task和await(四)

 1     class Program
 2     {
 3         private static string constr = "server=.;database=northwnd;integrated security=sspi";
 4         static void Main(string[] args)
 5         {
 6             Console.WriteLine("Running tasks...");
 7
 8             MethodTimer.TimeMethod(() =>
 9             {
10                 var t1 = GetEmployeeCount();
11                 var t2 = GetOrderCount();
12
13                 Task.WaitAll(t1, t2);
14                 Console.WriteLine("Number of employes: {0}, Number of orders: {1}", t1.Result, t2.Result);
15             }, 1, "Getting data took {1}ms");
16         }
17         public static async Task GetEandO()
18         {
19             int e =await GetEmployeeCount();
20             int o = await GetOrderCount();
21
22             Console.WriteLine("Number of employes: {0}, Number of orders: {1}", e, o);
23         }
24
25         public async static Task<int> GetEmployeeCount()
26         {
27             using (SqlConnection con=new SqlConnection(constr) )
28             {
29                 SqlCommand cmd = new SqlCommand("WaitFor Delay ‘0:0:02‘;select count(*) from employees", con);
30                 con.Open();
31                 return await cmd.ExecuteScalarAsync().ContinueWith(t => Convert.ToInt32(t.Result));
32             }
33         }
34         public async static Task<int> GetOrderCount()
35         {
36             using (SqlConnection conn = new SqlConnection(constr))
37             {
38                 SqlCommand cmd = new SqlCommand("WAITFOR DELAY ‘0:0:02‘;select count(*) from orders", conn);
39                 conn.Open();
40
41                 return await cmd.ExecuteScalarAsync().ContinueWith(t => Convert.ToInt32(t.Result));
42             }
43         }
44     }
45     public class MethodTimer
46     {
47         public static void TimeMethod(Action method, int iterations, string message)
48         {
49             Stopwatch sw = Stopwatch.StartNew();
50
51             for (int i = 0; i < iterations; i++)
52                 method();
53
54             sw.Stop();
55
56             Console.WriteLine(message, iterations, sw.ElapsedMilliseconds);
57         }
58     }
时间: 2024-10-12 21:41:02

C# ado.net 使用task和await(四)的相关文章

多线程-Task、await/async

Task创建无返回值 Task是.netframwork3.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚开始是一个edmx文件,现在的code first,ef轻量级.但是其他有的技术也是死掉了) Task具有线程执行的可控性,返回值,代码书写简单,性能好等特点. Task创建主要有三种方式 1.Task参数 Task t = new Task(() => { for (int i = 0; i <

C#异步中的Task,async,await

class Program { static void Main(string[] args) { Console.WriteLine("我是主线程,线程ID:{0}", Thread.CurrentThread.ManagedThreadId); TestAsync(); Console.ReadLine(); } static async void TestAsync() { Console.WriteLine("调用GetReturnResult()之前,线程ID:{0

C# Task中的Func, Action, Async与Await的使用

在说Asnc和Await之前,先说明一下Func和Action委托, Task任务的基础的用法 1. Func Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型, Func<T,T,Result>:有参数,有返

ASP.NET Core Web 应用程序系列(四)- ASP.NET Core 异步编程之async await

原文:ASP.NET Core Web 应用程序系列(四)- ASP.NET Core 异步编程之async await PS:异步编程的本质就是新开任务线程来处理. 约定:异步的方法名均以Async结尾. 实际上呢,异步编程就是通过Task.Run()来实现的. 了解线程的人都知道,新开一个线程来处理事务这个很常见,但是在以往是没办法接收线程里面返回的值的.所以这时候就该await出场了,await从字面意思不难理解,就是等待的意思. 执行await的方法必须是async修饰的,并且是Task

await Task传异步Lambda问题

微软在.NET4.5中升级了C#语言到5.0,加入了await和async语法,极大地方便了广大开发人员的异步编程,也是为了和WinRT API配套,因为这套API充满了异步编程. 在开发过程中发现有时await不住?!流程还是往下走,觉得可能是使用有问题,于是进行了一下研究,发现了原因. 看下面的一组代码的运行结果及分析说明,WPF平台,代码在按钮的Click事件中. 1. Debug. WriteLine( "1: " + Thread .CurrentThread .Manage

【5min+】帮我排个队,谢谢。await Task.Yield()

系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等. 5min+不是超过5分钟的意思,"+"是知识的增加.so,它是让您花费5分钟以下的时间来提升您的知识储备量. 正文 如果您现在正在使用.NetCore的话,相信您对await 和 async这两个关键字再熟悉不过了.它们是为异步编程提供的语法糖,便于我们在代码中更便捷的进行异步

云计算设计模式(四)——消费者的竞争模式

云计算设计模式(四)--消费者的竞争模式 允许多个并发用户处理在同一个通讯通道接收的消息.这种模式使系统能够同时处理多个邮件,以优化吞吐量,提高可扩展性和可用性,以及平衡工作负载. 背景和问题 在云中运行的应用程序,可以预计,以处理大量的请求.而不是过程的每个请求同步地,一个常用的方法是通过一个消息传送系统到该异步地处理它们的另一服务(消费者服务),以通过他们的应用程序.这种策略有助于确保在应用程序的业务逻辑没有被阻塞,而正在处理的请求. 请求的数量可以随着时间的原因有很多显著变化.突然一阵在用

async/await 的基本实现和 .NET Core 2.1 中相关性能提升

前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 CTO 以及主管的个人能力也是分不开的),业界前沿的技术概念也都能在上手的项目中出现.所以虽然现在团队仍然处于疾速的发展中,也存在一些奇奇怪怪的事情,工作内容也算有紧有松,但是总体来说也算有苦有乐,不是十分排斥. 其实这样的环境有些类似于笔者心中的"圣地" Thoughtworks 的

IdentityServer4-MVC+Hybrid实现Claims授权验证(四)

原文:IdentityServer4-MVC+Hybrid实现Claims授权验证(四) 上节以对话形式,大概说了几种客户端授权模式的原理,这节重点介绍Hybrid模式在MVC下的使用.且为实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置打下基础(第五节介绍). 本节内容比较多,且涉及一.二节的内容,如有不懂,可先熟悉一.二节知识. 一.新建授权服务,命名为AuthServer (1)新建Web API项目,不用配置HTTPS,不进行身份验证. 设置成控