zoukankan      html  css  js  c++  java
  • C# 异步编程

    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<string> 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;
            }
  • 相关阅读:
    Leetcode: Summary Ranges
    Leetcode: Kth Smallest Element in a BST
    Leetcode: Basic Calculator II
    Leetcode: Basic Calculator
    Leetcode: Count Complete Tree Nodes
    Leetcode: Implement Stack using Queues
    Leetcode: Maximal Square
    Leetcode: Contains Duplicate III
    Leetcode: Invert Binary Tree
    Leetcode: The Skyline Problem
  • 原文地址:https://www.cnblogs.com/gmcn/p/5830494.html
Copyright © 2011-2022 走看看