1.  方法名前只有async,但是方法中Task实例前没有await关键字,该方法和普通方法没有什么区别,但是会报一个警告. #region 情况一 /// <summary> /// 当只有async,没有await时,方法会有个警告 /// 和普通的多线程方法没有什么区别 /// </summary> private static async void Test1() { //主线程执行 Console.WriteLine("主线程{0}开始:", Thr…
一. BeginInvoke最后两个参数的含义 倒数第二个参数:指该线程执行完毕后的回调函数:倒数第一个参数:可以向回调函数中传递参数. 下面以一段代码说明: /// <summary> /// 执行动作:耗时而已 /// </summary> private void TestThread(string threadName) { Console.WriteLine("线程开始:线程名为:{2},当前线程的id为:{0},当前时间为:{1},", System…
一. 综述 经过两个多个周的整理,异步多线程章节终于整理完成,如下图所示,主要从基本概念.委托的异步调用.Thread多线程.ThreadPool多线程.Task.Parallel并行计算.async和await.线程特殊处理.委托赋值的几种形式等九个方面来介绍异步多线程. 二. 基本概念的梳理 1. 进程.线程和多线程 进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源,而一个进程又是由多个线程组成. 线程:线程是程序中的一个执行流,每个线程都有自己…
1. 线程的异常处理 我们经常会遇到一个场景,开启了多个线程,其中一个线程报错,导致整个程序崩溃.这并不是我们想要的,我需要的结果是,其中一个线程报错,默默的记录下,其它线程正常进行,保证程序整体可以走下来. 解决方案:给函数体加try-catch,只让报错线程异常,其它线程可以正常进行. private void button7_Click(object sender, EventArgs e) { Stopwatch watch = new Stopwatch(); watch.Start(…
一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Task.Run()开启多线程,能向其中传递无参数的委托,有参数的可以使用  Task.Run(()=>{   TestThread("ypf")  })这种形式.(推荐这种方式,最简洁.) 3. 先实例化Task,然后调用Start方法进行线程的开启. Task构造函数可以无参委托或无参…
一. Thread多线程   1. 两种使用方式 通过F12查看Thread后,发现有两类构造函数,ParameterizedThreadStart和ThreadStart,其中 ThreadStart:无参无返回值的委托 ParameterizedThreadStart:无返回值,但是有一个object类型参数的委托 下面Thread的使用都是围绕上面这两个构造函数来进行的. 方式一:(当委托是无参数,但赋值的方法又是有参数的,可以使用这种方式转换) 当只有一行的时候,可以省略{},实际上和下…
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮币”.为了增加趣味性,帮帮币“掉落”之后所有用户都可以“捡取”,谁先捡到归谁. 但这样就产生了一个问题,因为这个“帮帮币”是可以买卖有价值的,所以难免会有恶意用户用爬虫不断的扫描,导致这样的情况出现: 注:经核实,乔布斯的同学 其实没有用爬虫,就是手工点,点出来的!还能说什么呢?只能表示佩服啊佩服……
c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/tokens/verbatim 1.在变量名前加@,可以告诉编译器,@后的就是变量名.主要用于变量名和C#关键字重复时使用. string[] @for = { "John", "James", "Joan", "Jamie" }; fo…
进程:进程是一个程序在电脑运行时,全部资源的合集叫进程 线程:是程序的最小执行单位,包含计算资源,任何一个操作的响应都是线程完成的.   多线程:多个线程并发执行   Thread 是.net框架封装的一个类,描述线程的东西   同步和异步都是描述方法的,所以需要使用委托.   同步方法:发起一个调用,一定等着计算结束才运行下一行. 异步方法:发起一个调用,并不等计算结束,而是直接运行下一行,刚才的计算,会启动一个新的线程去执行   用委托的BeginInvoke()方法  BeginInvok…
1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库=异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行. 2.同步与异步的区别 同步(Synchronous):在执行某个操作时,应用程序必须等待该操作执行完成后才能继续执行. 异步(Asynchronous):在执行某个操作时,应用程序可在异步操作执行时继续执行.实质:异步操作,启动了新的线程,主线程与方法线程并行执行. 3.异…