以下のコードでawait RunAsync();
を呼び出すと、TaskContinuationOptions.OnlyRanToCompletion
の継続を続行することが期待されますが、OnlyOnCanceled
継続が呼び出されます(デバッグ出力「タスクがキャンセルされました」)。OnlyOnCanceled継続がなぜ呼び出されるのですか?
なぜですか?
private static async Task RunAsync()
{
try
{
await Task.Run(() => DoWork())
.ContinueWith(
(t) =>
{
if (t?.Exception != null)
{
throw t.Exception;
}
}, TaskContinuationOptions.OnlyOnFaulted
).ContinueWith(
(t) =>
{
Debug.WriteLine("Task canceled.");
}, TaskContinuationOptions.OnlyOnCanceled
).ContinueWith(
(t) =>
{
Debug.WriteLine("Task completed.");
}, TaskContinuationOptions.OnlyOnRanToCompletion);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
private static void DoWork()
{
Thread.Sleep(1000);
}