【发布时间】:2018-12-21 06:18:31
【问题描述】:
我试图更好地理解 C# 中的任务和异步操作,并且我正在运行这个示例程序,但我对输出感到困惑。当我运行此程序时,有时程序在
之后不会在 CallMethod 中输出控制台输出int length = await task
有时确实如此,但当我取消注释时
Console.ReadLine()
它总是运行所有的 CallMethod。
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace Tasks1
{
class Program
{
static void Main(string[] args)
{
Task task = new Task(CallMethod);
task.Start();
task.Wait();
//Console.ReadLine();
}
static async void CallMethod()
{
string filePath = "/Users/testname/Projects/Tasks1/Tasks1/Sample.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 starting");
using (StreamReader reader = new StreamReader(file))
{
string s = await reader.ReadToEndAsync();
length = s.Length;
}
Console.WriteLine("File reading is complete");
return length;
}
}
}
【问题讨论】:
标签: c# asynchronous task