看一下这段代码:
private async void button1_Click(object sender, EventArgs e)
{
using (SqlConnection connection = new SqlConnection("some connection string"))
{
await connection.OpenAsync();
using (SqlCommand command = new SqlCommand("select document from myTable where id = 'xyz'", connection))
{
using (SqlDataReader reader = await command.ExecuteReaderAsync())
{
if (await reader.ReadAsync())
if (!await reader.IsDBNullAsync(0))
{
data = reader.GetStream(0);
}
}
}
}
}
Document是我的SQL数据库中的一个图像字段,它可能会变得很大。虽然它可以很好地处理小blob(使用200 kB Blob测试),但它不适用于巨大的blob(目前使用400 MB Blob进行测试)。 当我使用调试器并逐步执行代码时,我看到它进入了等待reader.ReadAsync()的行,我们将永远留在那里。
然而,在以下情况下,它按预期工作:
但是为什么它不能在没有丢失任何错误的情况下使用Non-SequentialAccess?
我得到的是Threads-Window上的这个callstack:
刚才意识到这个callstack随着时间的推移而变化,所以似乎正在进行中:
但是,它并没有结束。