命中时执行退出等待DownloadStringTaskAsync

时间:2017-03-27 17:12:49

标签: c# visual-studio

class Program
{
    static void Main(string[] args)
    {
        Class1 testcla = new Class1();
        testcla.test();
    }
}

class Class1
{
    public void  test()
    {
        test1();
    }

    public async void test1()
    {
        await test2();
    }

    public async Task<string>  test2()
    {
        WebClient testwc = new WebClient();
        var content = await testwc.DownloadStringTaskAsync("www.yahoo.com");
        return content;
    }
}

您好, 我需要等待DownloadStringTaskAsync完成下载内容,但是当它执行到该行时,它会退出而没有任何错误。

请咨询

1 个答案:

答案 0 :(得分:0)

尝试以下代码。正如@Dispersia所述,网址应包含httphttpsftp等。 您的代码必须等待async任务完成。对于入门者,以下说明将帮助您了解async。 看看main()方法,它只运行一个任务,就是这样。 main()不依赖于async任务结果的任何值,它结束并且应用程序关闭。 Async任务,即DownloadStringTaskAsync()需要很长时间才能完成,但是从WebClient收到结果,main方法完成执行并关闭应用程序。因此,你永远不会看到任何结果。

我已对main函数进行了更改,等待按下Enter键。等待DownloadStringTaskAsync完成,您将在输出窗口中看到内容长度。然后你可以按回车键

static void Main(string[] args)
{

    Class1 testcla = new Class1();
    testcla.test();

    Console.WriteLine("Wait for async task to finish.");
    Console.ReadLine();
}

class Class1
{
    public void test()
    {
        test1();
    }

    public async void test1()
    {
        await test2();
    }

    public async Task<string> test2()
    {
        try
        {
            WebClient testwc = new WebClient();
            var content = await testwc.DownloadStringTaskAsync("http://www.yahoo.com");
            Console.WriteLine("Length of content received: " + content.Length.ToString());
            return content;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return null;
        }
        finally
        {
            Console.WriteLine("Async task done. Press enter to exit.");
        }
    }
}