欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#异步 await

程序员文章站 2022-03-09 23:31:21
...

用到了就随时记录下

当我们处理UI和on按钮单击时,我们使用一个长时间运行的方法,比如读取一个大文件或其他需要很长时间的东西,在这种情况下,整个应用程序必须等待才能完成整个任务。

换句话说,如果同步应用程序中的任何进程被阻塞,整个应用程序将被阻塞,我们的应用程序将停止响应,直到整个任务完成。

异步编程在这种情况下非常有用。通过使用异步编程,应用程序可以继续进行不依赖于完成整个任务的其他工作。

如果任何第三个方法 Method3与method1有依赖关系,那么它将在await关键字的帮助下等待method1的完成。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            call();
            Console.ReadKey();
        }


        public static async void call()
        {
            Task<int> task1 = Method1();
            Method2();
            //
            int count = await task1;
            Method3(count);

        }
        public static async Task<int> Method1()
        {
            int count = 0;
            await Task.Run(() =>
            {
                for (int i = 0; i < 1225; i++)
                {
                    Console.WriteLine("methid1");
                    count += 1;
                }
            });
            return count;
        }


        public static  void Method2()
        {
            for (int i = 0; i < 1225; i++)
            {
                Console.WriteLine(" Method 2");
            }
        }

        public static void Method3(int count)
        {
            Console.WriteLine("Total count is " + count);
        }
    }
}

await 必须与async 同时使用

class Program  
{  
    static void Main()  
    {  
        Task task = new Task(CallMethod);  
        task.Start();  
        task.Wait();  
        Console.ReadLine();  
    }  
  
    static async void CallMethod()  
    {  
        string filePath = "E:\\sampleFile.txt";  
        Task<int> task = ReadFile(filePath);  
  
        Console.WriteLine(" Other Work 1");  
        Console.WriteLine(" Other Work 2");  
        Console.WriteLine(" Other Work 3");  
  
        int length = await task;  
        Console.WriteLine(" Total length: " + length);  
  
        Console.WriteLine(" After work 1");  
        Console.WriteLine(" After work 2");  
    }  
  
    static async Task<int> ReadFile(string file)  
    {  
        int length = 0;  
  
        Console.WriteLine(" File reading is stating");  
        using (StreamReader reader = new StreamReader(file))  
        {  
            // Reads all characters from the current position to the end of the stream asynchronously    
            // and returns them as one string.    
            string s = await reader.ReadToEndAsync();  
  
            length = s.Length;  
        }  
        Console.WriteLine(" File reading is completed");  
        return length;  
    }  
}  

C#异步 await

相关标签: 异步