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;
}
}
上一篇: HTML 5 画布 vs SVG