如何正确调用Await方法

本文关键字:方法 Await 调用 何正确 | 更新日期: 2023-09-27 18:00:16

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TaskConsole
{
    class Program
    {
        static void Main(string[] args)
        {       
             test();    
        }
        static async Task<string> ReadTextAsync() 
        {
            string textContents;
            Task<string> readFromText;
            using (StreamReader reader =  File.OpenText("email.txt"))
            {
                readFromText = reader.ReadToEndAsync();
                textContents = await readFromText;
            }
            return textContents;     
        }
        static async Task test ()
        {
            string capture = await ReadTextAsync();
            Console.WriteLine(capture);
        }               
    }               
}

我有以下代码要使用async从文本文件中读取。我从这篇文章中了解到,微软使用StreamReader实现的例子是不正确的,所以作为一个学习练习,我决定纠正它。当测试方法没有返回任何任务时,我如何正确地从main调用测试方法。我读了一些书,了解到使用async void是一种糟糕的做法。就我而言,我该怎么办?

旁注:我不知道我是否实现错了,但我无法显示我的文本。我尝试了非异步方式,它起了作用,但是,当我使用异步时,它显示为空白,并且请按任意键继续">

如何正确调用Await方法

当测试方法不返回任何任务。

因为Main不能修改为async,所以您必须在它上面显式地调用Task.Wait

Test().Wait();

这是异步调用上唯一应该阻止的位置

static async Task<string> ReadTextAsync() 
        {
            string textContents;
            Task<string> readFromText;
            using (StreamReader reader =  File.OpenText("email.txt"))
            {
                readFromText = await Task.Run(() => reader != null ? reader.ReadToEndAsync() : null);
                textContents = readFromText;
            }
            return textContents;     
        }
        static Task test ()
        {
            string capture = ReadTextAsync();
            Console.WriteLine(capture);
        }