async await 并没有开启多线程  出现await的地方 只是开启了一个子线程继续往后执行  主线程返回 防止阻塞

相当于  await customerRepository.getall().ToListAllAsync()

主线程一直运行  碰到await   主线程就会返回干其他事情

await后面的代码可以看成是子线程的回调  只有子线程执行完了才会执行await后面的代码       await后面的代码可能是子线程执行 可能是主线程执行

为什么没有返回值 方法返回值也写Task   因为主线程碰到await就返回了  对于主线程来说 是有返回值的  返回值就是await后面的 Task

*****************多线程*****************************

Task.Run()开启异步多线程
Task.WaitAll()参数是task集合 所有的线程都执行完毕才返回
多线程前提:业务可以并发执行
Task.WaitAny()参数是task集合 某个线程执行完毕就返回

多线程 用于可以并发执行的业务中   比如  同步产品 同步客户 等可以同时执行的任务 没有先后顺序的

*******

这两个线程等待的时间不能相同  如果相同 会存在线程安全的问题

线程安全  多线程对同一个变量 方法进行操作 可以通过加锁解决线程安全问题

TaskWhenAll和Task.WaitAll都是等待全部任务完成  但是Task.WaitAll会发生阻塞

TaskWhenAll在Task.WaitAll方法上面又封装了一层

在第一个线程写入的同时第二个线程也进行了写入  其中一个线程的写入会给覆盖 可以通过对写入日志这个方法进行加锁来保护线程安全

普通方法中

************

同时开启两个线程执行这两个任务 全部完成后继续往后面执行

也是同时开启两个线程  但不会等待两个线程执行完毕  主线程就直接往后面执行

********************

开启两个线程调用两个异步接口  全部完成后继续执行

********************

Aaa和Baa都是两个异步的接口    刚进去两个方法  主线程继续往后执行 就直接结束了  两个线程并没有执行完

通过加锁解决线程安全

异步多线程一定是基于委托的

异步多线程调试的时候打断点是没有用的  断点会乱跳  最好的办法就是在控制台打印日志    多个代码点都打印

获取当前线程ID

///   第一种 通过回调控制顺序

简写

BeginInvoke有三个参数  第一个是act委托执行的参数   第二个参数为回调(等第一个委托执行完才执行)  第三个参数在第一个委托执行完毕会当成一个状态参数传到回调委托中

执行完第一个委托  会把第一个委托的结果 和第三个状态参数 包成一个对象 当成回调委托的参数

//2222

通过等待

.IsCompleted 委托的状态 通过while循环判断当前的状态    只有完成后才能出while循环  否则会一直在while循环里面执行

async await 多线程的更多相关文章

  1. 多线程(5)async&await

    .net 4.0的Task已经让我们可以非常简单地使用多线程,并且可以有返回值,也可以支持线程的取消等操作,可谓已经很强大了.但.net 4.5为我们带来了async&await,使得实现多线 ...

  2. 聊聊多线程那一些事儿 之 五 async.await深度剖析

     hello task,咱们又见面啦!!是不是觉得很熟读的开场白,哈哈你哟这感觉那就对了,说明你已经阅读过了我总结的前面4篇关于task的文章,谢谢支持!感觉不熟悉的也没有关系,在文章末尾我会列出前四 ...

  3. async/await到底该怎么用?如何理解多线程与异步之间的关系?

    前言 如标题所诉,本文主要是解决是什么,怎么用的问题,然后会说明为什么这么用.因为我发现很多萌新都会对之类的问题产生疑惑,包括我最初的我,网络上的博客大多知识零散,刚开始看相关博文的时候,就这样.然后 ...

  4. async/await的多线程问题

    今天尝试把.net4.5新增的异步编程模型async/await加入自己的框架,因为从第一印象看,使用async/await的写法实在太方便了,以同步代码的方式写异步流程,写起来更顺畅,不容易打断思路 ...

  5. C#多线程和异步(二)——Task和async/await详解

    一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...

  6. C#多线程和异步(二)——Task和async/await详解(转载)

    一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...

  7. C#多线程和异步——Task和async/await详解

    阅读目录 一.什么是异步 二.Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 3 Task的延续操作(WhenAny/WhenAll/Cont ...

  8. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  9. C# Async, Await and using statements

    Async, Await 是基于 .NEt 4.5架构的, 用于处理异步,防止死锁的方法的开始和结束, 提高程序的响应能力.比如: Application area           Support ...

随机推荐

  1. MyEclipse与Eclipse配置清单

    MyEclipse与Eclipse配置清单 1.编码设置    workspace -> 设置全局编码utf-8    修改JSP编码(Encoding)为UTF-82.Java配置    格式 ...

  2. 结合sklearn的可视化工具Yellowbrick:超参与行为的可视化带来更优秀的实现

    https://blog.csdn.net/qq_34739497/article/details/80508262 Yellowbrick 是一套名为「Visualizers」的视觉诊断工具,它扩展 ...

  3. kafka数据可靠传输

    再说复制Kafka 的复制机制和分区的多副本架构是Kafka 可靠性保证的核心.把消息写入多个副本可以使Kafka 在发生崩愤时仍能保证消息的持久性. Kafka 的主题被分为多个分区,分区是基本的数 ...

  4. Docker学习笔记之了解 Docker 的核心组成

    0x00 概述 在掌握 Docker 的一些背景知识后,我们还不得不花费一节的篇幅来简单介绍有关 Docker 核心的一些知识.当然,大家不要觉得有“核心”这类的词,我们就要在这一节中深入 Docke ...

  5. php 网页版 ftp 小工具

    <?php define('IN_ECS', true); session_start(); header("Content-type:text/html;charset=utf-8& ...

  6. 深入理解 Vue 组件

    深入理解 Vue 组件 组件使用中的细节点 使用 is 属性,解决组件使用中的bug问题 <!DOCTYPE html> <html lang="en"> ...

  7. ZVAL——PHP源码分析

    基于 PHP 5.6.20 ZVAL——php变量实现的基础 _zval_struct 结构体的定义位于 Zend/zend.h 322 行 typedef union _zvalue_value { ...

  8. 18位身份证验证(Java)

    我的代码: package day20181016;/** * 身份证的验证 34052419800101001X * */import java.util.Scanner;public class ...

  9. LD_RUN_PATH和LD_LIBRARY_PATH是干什么的?

    1. 使用场合 LD_RUN_PATH在链接时使用 LD_LIBRARY_PATH在执行时使用 2. 如何指定环境变量 export LD_LIBRARY_PATH=/opt/jello/lib:$L ...

  10. 【配置】log4j.properties 详解与配置步骤

    一.Log4j基本使用方法 Log4j由三个重要的组件构成:[日志信息的优先级],[日志信息的输出目的地],[日志信息的输出格式]. 日志信息的优先级从高到低有ERROR.WARN. INFO.DEB ...