如何调试异步代码

本文关键字:异步 代码 调试 何调试 | 更新日期: 2023-09-27 18:11:53

我一直在尝试制作一个简单的应用程序,可以将youtube url列表作为mp3下载到指定文件夹。然而,它并没有下载文件。(我以前在这方面很好,但我想夏天缺乏练习已经毁了它)

首先,代码:https://gist.github.com/ericBG/159debbcdb606647afb8(我知道它不是最小的,但它相当小,无论如何,我不太确定问题出在哪里)

那么,发生的是,它意味着有一些输出,比如:

Enter folder path where you would like output .mp3 files to be saved:
G:'MusicTemp
Enter any youtube videos you would like downloaded:
https://www.youtube.com/watch?v=N6eUF30HXWY
API requested for http://youtube.com/watch?v=N6eUF30HXWY
Downloading API response for http://youtube.com/watch?v=N6eUF30HXWY
Song requested for http://youtube.com/watch?v=N6eUF30HXWY
Completed download.
Enter any youtube videos you would like downloaded:

(这个视频是我很容易找到的最短的视频)文件下载为"Video Title".mp3,下载路径为。

结果是这样的:

Enter folder path where you would like output .mp3 files to be saved:
G:'MusicTemp
Enter any youtube videos you would like downloaded:
https://www.youtube.com/watch?v=N6eUF30HXWY
API requested for http://youtube.com/watch?v=N6eUF30HXWY
Downloading API response for http://youtube.com/watch?v=N6eUF30HXWY
Completed download.
Enter any youtube videos you would like downloaded:

,文件不在路径上。

我有一种感觉,这是由于我的一些异步编程。然而,我不确定如何调试这个,因为我不知道哪些工具可以让我逐步了解我出错的地方,然后纠正。VS社区调试器让我调试这段代码好吗?谢谢你!

如何调试异步代码

注释的副本,因为这是问题的答案(而不是代码问题的解决方案):

你可以像调试普通代码一样调试它。设置一个断点,使用步进或步过并遍历代码。如果您有多个线程,这可能会很麻烦,因为调试器从一个线程跳转到另一个线程。如果你只想调试一个线程,去线程窗口(debug/windows/threads)找到当前线程(黄色箭头)并冻结所有其他线程。

在保存或下载文件时可能出现错误,但您没有检查它。

代码:

.ContinueWith(t => Console.WriteLine("Completed download.")));

应该检查先行词是否有错误。

.ContinueWith(t => 
              {
                 if(t.Exception != null)
                 {
                    // log error
                 }
                 else
                 {
                    Console.WriteLine("Completed download.")));
                 });

添加到列表中的外部任务表示延续的完成,因此即使下载失败,它也会成功。