Net中异步
同步和异步
1.同步是指只启动一个线程
2.异步是指同时启动多个线程
3.同步方法会卡界面,异步方法不会卡界面
原因:异步方法启动了子线程执行任务,主线程得到释放
4.同步方法会慢。异步方法会快
原因:异步启动了.多个线程执行任务,占用了更多的资源
5 异步是无序的,原因:线程的启动和执行是由操作系统决定的,是无序的。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private delegate void DoSomethingHandler(string name); private void Async_Click(object sender, RoutedEventArgs e)
{
DoSomethingHandler method = t =>
Console.WriteLine("这里是Async_Click,name={0},当前线程ID={1}",
t,Thread.CurrentThread.ManagedThreadId);
method("直接调用");
method.Invoke("Invoke");
method.BeginInvoke("BeginInvoke", null, null);//这就是异步调用
} }
private void DoSomething(string name)
{
Stopwatch watch = new Stopwatch();
watch.Start();
Console.WriteLine("这里是Async_Click,name={0},当前线程ID={1}",
name, Thread.CurrentThread.ManagedThreadId);
long lResult = 0;
for (int i=0;i<10000000;i++)
{
lResult += i;
}
Thread.Sleep(1000);
watch.Stop();
Console.WriteLine("这里是Async_Click,name={0},当前线程ID={1},计算结果是{2},耗时{3}",
name, Thread.CurrentThread.ManagedThreadId, lResult, watch.ElapsedMilliseconds);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
using System.Diagnostics; namespace MyAsyncDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private delegate void DoSomethingHandler(string name);
private void Async_Click(object sender, RoutedEventArgs e)
{
//DoSomethingHandler method = t =>
// Console.WriteLine("这里是Async_Click,name={0},当前线程ID={1}", t,Thread.CurrentThread.ManagedThreadId);
//method("直接调用");
//method.Invoke("Invoke");
//for (int i = 0; i < 5; i++)
//{
Console.WriteLine("**********************这里是Async_Click***************");
string name = string.Format("Async_Click_{0}", 1);
// DoSomethingHandler method = DoSomething;
Func<string,long> method = GetSomething;
AsyncCallback callback = t => Console.WriteLine("这里是AsyncCallback,当前线程ID={0},AsyncState={1}", Thread.CurrentThread.ManagedThreadId, t.AsyncState);
IAsyncResult result = method.BeginInvoke(name, callback, "Eleven");//这就是异步调用
//1. 一直等到结束,和同步的效果一样
//result.AsyncWaitHandle.WaitOne(-1); //2.等待异步线程结束的第二种方式
//while (!result.IsCompleted)
//{
// Thread.Sleep(100);
// Console.WriteLine("异步还没有结束,请继续等待");
//}
/3.常用的第三种方式
long lResult = method.EndInvoke(result);
Console.WriteLine("结果是{0}", lResult);
// }
Console.WriteLine("**********************这里是Async_Click***************"); }
private long GetSomething(string name)
{
Stopwatch watch = new Stopwatch();
watch.Start();
Console.WriteLine("这里是GetSomething,name={0},当前线程ID={1}",
name, Thread.CurrentThread.ManagedThreadId);
long lResult = 0;
for (int i = 0; i < 10000000; i++)
{
lResult += i;
}
Thread.Sleep(1000);
watch.Stop();
Console.WriteLine("这里是GetSomething,name={0},当前线程ID={1},计算结果是{2},耗时{3}",
name, Thread.CurrentThread.ManagedThreadId, lResult, watch.ElapsedMilliseconds);
return lResult;
}
private void DoSomething(string name)
{
Stopwatch watch = new Stopwatch();
watch.Start();
Console.WriteLine("这里是Async_Click,name={0},当前线程ID={1}",
name, Thread.CurrentThread.ManagedThreadId);
long lResult = 0;
for (int i=0;i<10000000;i++)
{
lResult += i;
}
Thread.Sleep(1000);
watch.Stop();
Console.WriteLine("这里是Async_Click,name={0},当前线程ID={1},计算结果是{2},耗时{3}",
name, Thread.CurrentThread.ManagedThreadId, lResult, watch.ElapsedMilliseconds);
} private void Sync_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 5;i++ )
{
string name = string.Format("Sync_Click_{0}", i);
DoSomething(name);
}
} }
}
Net中异步的更多相关文章
- 在内核中异步请求设备固件firmware的测试代码
在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...
- 在 tornado 中异步无阻塞的执行耗时任务
在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在 ...
- C#中异步和多线程的区别
C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为异步和多线程是等同的概念.但是,异步和多线程还是有一些区别的.而这些区 ...
- ionic中将service中异步返回的数据赋值给controller的$scope
1.service中异步获取数据实例 angular.module('starter.services', []) .factory('Chats', function($http,$q) {//定义 ...
- nodejs中异步
nodejs中的异步 1 nodejs 中的异步存在吗? 现在有点 javascript 基础的人都在听说过 nodejs ,而只要与 javascript 打交到人都会用或者是将要使用 nodejs ...
- cocos2dx lua中异步加载网络图片,可用于显示微信头像
最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...
- echarts异步数据加载(在下拉框选择事件中异步更新数据)
接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...
- SpringBoot中异步请求和异步调用(看这一篇就够了)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10661591.html,否则将追究法律责任!!! 一.SpringBoot中异步请求的使用 ...
- Java网络编程中异步编程的理解
目录 前言 一.异步,同步,阻塞和非阻塞的理解 二.异步编程从用户层面和框架层面不同角度的理解 用户角度的理解 框架角度的理解 三.为什么使用异步 四.理解这些能在实际中的应用 六.困惑 参考文章 前 ...
- Flink中异步AsyncIO的实现 (源码分析)
先上张图整体了解Flink中的异步io 阿里贡献给flink的,优点就不说了嘛,官网上都有,就是写库不会柱塞性能更好 然后来看一下, Flink 中异步io主要分为两种 一种是有序Ordered 一种 ...
随机推荐
- sort、uniq、tr、cut、eval以及正则表达式
sort.uniq.tr.cut.eval以及正则表达式 目录 sort.uniq.tr.cut.eval以及正则表达式 一.sort命令 1. sort的作用 2. 语法格式 3. 常用选项 4. ...
- MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache)
一.缓存机制 使用缓存可以使应用更快地获取数据,避免频繁的数据库交互操作,尤其是在查询越多,缓存命中率越高 的情况下,缓存的作用就越明显. 1.缓存原理:Map ■ 查询时,先从缓存区查询:找到,返回 ...
- Kubernets-初见
只是入门文档. 使用 linux 通过 java -jar 方式部署单体架构,war 包丢tomcat. 使用 Docker部署微服务架构. 使用 K8s Pod 进行部署 一个一个 服务 命令 je ...
- Solution -「ARC 124E」Pass to Next
\(\mathcal{Description}\) Link. 有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...
- FutureTask类的get方法如何实现线程同步等待
接上篇JDK中线程中实现同步等待闭环的一种方式 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com),为什么使用了FutureTask中的get方法就可以实现线程的同步等待?这就将重点讲述下F ...
- 显式锁之ReentrantLock实现
下图是Lock接口清单,定义了一些抽象的锁操作.Java本身提供了内部锁机制,那么还需要显示Lock,何用?与内部加锁机制不同,Lock提供了无条件.可轮询.定时.可中断的锁获取操作:所有加锁和解锁的 ...
- nginx负载均衡初体验
本例采取简单的轮询策略进行nginx的负载均衡处理. 在反向代理(参考:https://www.cnblogs.com/ilovebath/p/14771571.html)的基础上增加负载均衡处理的n ...
- 记录一次dns劫持及其解决办法
发现问题 偶然发现家里的私人云盘不能用了,最开始以为是云盘出现了问题,各种修复重启后发现云盘并没有问题.然后又发现电脑无法使用浏览器访问网页(或者加载异常缓慢),但是各种软件又可以正常使用,win+R ...
- Windows系统散列值获取分析与防范
LM Hash && NTLM Hash Windows操作系统通常使用两种方法对用户的明文进行加密处理,在域环境中,用户信息存储在ntds.dit中,加密后为散列值.Windows操 ...
- ctf平台
CTF靶场 蓝鲸安全:http://whalectf.xin bugku:https://ctf.bugku.com XCTF攻防世界:https://adworld.xctf.org.cn/ i春秋 ...