Vấn đề về task.wait() và await

Chào mọi người!
Em đang tìm hiểu về multithread trong C#
Em đang focus vào đoạn code này để học về async và await

class Program
{
    static void Main()
    {
        Task task = new Task(CallMethod);
        task.Start();
        task.Wait();
        Console.WriteLine("dsdfsdf");
        Console.ReadLine();
    }
    static async void CallMethod()
    {
        string filePath = "D:\\intern\\thread\\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;
    }
}

kết quả trả về console:Capture
em thắc mắc về Wait() dùng để đợi task complete nhưng sao đoạn code Console.WriteLine("dsdfsdf"); vẫn được thực thi trước khi task complete ạ?
Giúp em với, em cảm ơn!

Task task = new Task(CallMethod);
static async void CallMethod()

async void methods are generally discouraged for code other than event handlers because callers cannot await those methods and must implement a different mechanism to report successful completion or error conditions
Official Documentation

Theo đó task thì được đợi nhưng CallMethod thì không.

3 Likes

cảm ơn bác nhé, em hiểu rồi ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?