ReadAllLinesAsync
非同期機能を使用して呼び出されるメソッドを実装しようとしています。次のコードを作成しました。
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 をアタッチしてコードを実行すると、コードが同期的に実行され、メイン スレッドがブロックされて UI がハングします。
3 台のマシンで問題の再現を試み、成功しました。各テストは、Visual Studio 2012 を使用して 64 ビット マシン (Windows 8 または Windows 7) で実施されました。
この問題が発生する理由と解決方法を知りたいです (デバッガーなしで実行すると開発が妨げられる可能性があるため)。