如何调试异步代码?

时间:2015-09-08 11:11:19

标签: c# .net debugging asynchronous visual-studio-debugging

我一直在尝试创建一个简单的应用程序,它可以获取youtube网址列表并将其作为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:

(视频是我很容易找到的最短视频btw) 并且文件在路径下载为“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社区调试器能让我调试好这段代码吗?谢谢!

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

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

代码:

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

应检查先行者是否有错误。

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

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