【发布时间】:2020-10-10 02:14:17
【问题描述】:
我正在单独测试一些代码,它运行得很好——调试器会逐行遍历并返回预期的结果。以下是我正在单独测试的一些代码:
static async Task<List<string>> GetExclusionDataAsync(Uri blobUri)
{
var listOfExclusions = new List<string>();
var blobDownloadInfo = await StreamBlobData(blobUri);
using (StreamReader reader = new StreamReader(blobDownloadInfo.Content))
{
while (!reader.EndOfStream)
{
string exclusionRow = reader.ReadLine();
listOfExclusions.Add(exclusionRow);
}
}
return listOfExclusions;
}
private static async Task<BlobDownloadInfo> StreamBlobData(Uri blobPathUri)
{
BlobClient blobClient = new BlobClient(blobPathUri);
BlobDownloadInfo blobDownloadInfo = await blobClient.DownloadAsync();
return blobDownloadInfo;
}
我已经将这个测试代码(几乎)完全复制到另一个更大的开发者中。解决方案。当我在BlobClient blobClient = new BlobClient(blobPathUri); 行上设置断点、调试并尝试跳过/进入该行时,调试器会跳过方法中的其余代码,并在没有预期数据的情况下跳回到先前的方法。见下文:
调试器从第 75 行开始。
然后我跳过/进入,调试器跳到第 60 行(调用方法),没有数据。
我该如何解决这个问题/发生了什么?
我不熟悉异步编程和从 blob 存储中检索内容。提前致谢!
【问题讨论】:
-
它没有跳到那一行,它没有执行超过那一行。所以呼叫尚未等待,因此线路本身是黄色的。如果它没有数据返回,下一行将是黄色的。在您的隔离项目中,您调用显然是同步完成的,这是允许的。从技术上讲,异步函数确实会在其第一个不完整的
await处返回给调用者,然后调用者的await等待它。 -
查看 Visual Studio 的工具栏。回跳时,“线程”号会变吗?
-
@GabrielLuci 你指的是VS>debug>windows>threads吗?我想这就是你所指的。当我在调试时打开此窗口并逐步执行如上所示的代码时,线程数似乎在我逐步执行时随机增加或减少。我尝试了大约 10 次,最终结果是线程数有时会上升有时会下降。我很困惑。
-
当然,那个窗口也可以。该窗口中将有一个黄色箭头,显示您当前正在调试的线程。我想知道它是否跳到另一个线程。
-
@JustinFeistner,请为您的问题添加答案:)。
标签: c# debugging async-await azure-blob-storage