博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 异步编程
阅读量:5239 次
发布时间:2019-06-14

本文共 1809 字,大约阅读时间需要 6 分钟。

1. await

例如有一个静态方法 m , 要在程序中异步调用这个方法, 就在此方法前加关键字 await , 那么当程序运行到这条语句时, 会立即返回包含这条语句的方法, 并异步执行 m 方法,这样ui线程就不会被占用, 然后当 m 方法执行结束后会再次返回这条语句继续往下执行.

2. async

包含 await 关键字的方法必须添加 async 修饰符, 此方法的返回类型可以为 Task、 Task<TResult>或 void. 方法不能声明任何 ref 或 out 参数, 但是可以调用具有这类参数的方法.

3. 异步方法

能加 await 关键字的方法与一般方法不同,

没有返回值的异步方法使用 Task类型作为返回类型,

有返回值的方法使用 Task<TResult>作为返回类型, TResult为返回值的类型, (void返回类型只能用在事件方法中),

异步方法一般使用 Task.Run(Action) 来创建线程.

例: 需要返回值的异步方法

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;using System.Security.Cryptography;namespace Crypto{    class Hash    {        //需要返回值的异步方法使用Task作为方法的返回值类型        public static Task
GetSHA1Async(string fileName) { //使用Task.Run(Action)创建线程池线程 return Task.Run(() => { string sha1str = ""; if (File.Exists(fileName)) { FileStream file = new FileStream(fileName, FileMode.Open); byte[] sha1 = SHA1.Create().ComputeHash(file); //计算文件的sha1 file.Close(); //先用BitConverter将sha1字节数组转换为16进制表示的字符串,默认每个字节用"-"分割 //再将字符串中的分隔符"-"去掉(替换为空字符串"") sha1str = BitConverter.ToString(sha1).Replace("-", ""); } return sha1str; }); } }}//在一个按钮控件的click事件中调用此异步方法private async void buttonSHA1JiShuan_Click(object sender, RoutedEventArgs e) { textboxSHA1JiShuan.Text = ""; groupboxSHA1.IsEnabled = false; string sha1 = await Crypto.Hash.GetSHA1Async(textboxFileName.Text); textboxSHA1JiShuan.Text = sha1; groupboxSHA1.IsEnabled = true; }

 

转载于:https://www.cnblogs.com/gmcn/p/5830494.html

你可能感兴趣的文章
如何在vue单页应用中使用百度地图
查看>>
Springboot使用步骤
查看>>
Spring属性注入
查看>>
Springboot-配置文件
查看>>
Springboot-日志框架
查看>>
SpringBoot-thymeleaf
查看>>
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
spring与quartz整合
查看>>
Kattis之旅——Eight Queens
查看>>
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>
Android控件之GridView探究
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
snmpwalk命令常用方法总结
查看>>
网站产品设计
查看>>
代理ARP
查看>>