別の例外が発生しているかまたは、非同期のTask
のAction
内でtry~catch
していないから捕捉できないのではないでしょうか。Windows Forms(Visual Studio 2017. Windows 10, .NET Framework 4.5) で試したところでは、以下のようでないと捕捉できませんでした。
C#
1 private async void button1_Click(object sender, EventArgs e)
2 {
3 try
4 {
5 //例)
6 string abc = @"C:\Sample\abc.txt";
7 string xyz = @"C:\TEST\xyz.txt";
8#if false
9 // これだとNG
10 await Task.Run(() => File.Move(abc, xyz));
11#else
12 await Task.Run(() =>
13 {
14 try
15 {
16 File.Move(abc, xyz);
17 }
18 catch (UnauthorizedAccessException ex)
19 {
20 Debug.WriteLine("UnauthorizedAccessException: " + ex.Message);
21 }
22 catch (Exception ex)
23 {
24 Debug.WriteLine("Exception: " + ex.Message);
25 }
26 });
27#endif
28 }
29 catch (UnauthorizedAccessException ex)
30 {
31 Debug.WriteLine("UnauthorizedAccessException: " + ex.Message);
32 }
33 catch (Exception ex)
34 {
35 Debug.WriteLine("Exception: " + ex.Message);
36 }
37 }
38 }
39}
全てのException
を捕捉するようにしてみて確認してみてください。
尚、上記コード外側のtry~catch
では一応引っかかるものの、以下のメッセージがデバッグ端末に出力されました。(例外の種別は違いますが、ユーザーコード内でハンドルされていないと言うのが問題)
例外がスローされました: 'System.IO.FileNotFoundException' (mscorlib.dll の中)
型 'System.IO.FileNotFoundException' の例外が mscorlib.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
ファイル 'C:\Sample\abc.txt' が見つかりませんでした。