Я пытаюсь реализовать метод под названием ReadAllLinesAsync
с помощью функции async. Я создал следующий код:
private static async Task<IEnumerable<string>> FileReadAllLinesAsync(string path)
{
using (var reader = new StreamReader(path))
{
while ((await reader.ReadLineAsync()) != null)
{
}
}
return null;
}
private static void Main()
{
Button buttonLoad = new Button { Text = "Load File" };
buttonLoad.Click += async delegate
{
await FileReadAllLinesAsync("test.txt"); //100mb file!
MessageBox.Show("Complete!");
};
Form mainForm = new Form();
mainForm.Controls.Add(buttonLoad);
Application.Run(mainForm);
}
Я ожидаю, что указанный код будет выполняться асинхронно, а на самом деле это так! Но только когда я запускаю код без Visual Studio Debugger.
Когда я запускаю код с приложением Visual Studio Debugger, код запускается синхронно, блокируя основной поток, заставляя пользовательский интерфейс зависать.
Я попытался воспроизвести проблему на трех машинах и преуспел. Каждый тест проводился на 64-битной машине (Windows 8 или Windows 7) с использованием Visual Studio 2012.
Я хотел бы знать, почему эта проблема возникает и как ее решить (поскольку работа без отладчика, вероятно, будет препятствовать развитию).