Różna obsługa wyjątków między Task.Run a Task.Factory.StartNew

Wystąpił problem podczas używaniaTask.Factory.StartNew i próbował uchwycićexception to jest rzucone. W mojej aplikacji mam długotrwałe zadanie, które chcę umieścić w aTask.Factory.StartNew(.., TaskCreationOptions.LongRunning);

Jednak wyjątek nie zostaje złapany, gdy używamTask.Factory.StartNew. Działa jednak tak, jak się tego spodziewam, gdy używamTask.Run, o którym myślałem, że jest tylko opakowaniemTask.Factory.StartNew (na przykładten artykuł MSDN).

Przykład pracy znajduje się tutaj, z tą różnicą, że wyjątek jest zapisywany na konsoli podczas używaniaTask.Run, ale nie podczas używaniaFactory.StartNew.

Moje pytanie brzmi:
jeśli mamLongRunning zadanie, które ma możliwość wyrzucania wyjątków, jak mam je obsługiwać w kodzie wywołującym?

private static void Main(string[] args)
{
    Task<bool> t = RunLongTask();
    t.Wait();
    Console.WriteLine(t.Result);
    Console.ReadKey();
}

private async static Task<bool> RunLongTask()
{
    try
    {
        await RunTaskAsync();
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        return false;
    }
    Console.WriteLine("success");
    return true;
}

private static Task RunTaskAsync()
{
    //return Task.Run(async () =>
    //    {
    //        throw new Exception("my exception");
    //    });
    return Task.Factory.StartNew(
        async () =>
    {
        throw new Exception("my exception");
    });

}

questionAnswers(3)

yourAnswerToTheQuestion