我在使用Task.Factory.StartNew
并尝试捕获exception
抛出的问题时遇到了问题。在我的应用程序中,我有一个长时间运行的任务,我想将它封装在一个Task.Factory.StartNew(.., TaskCreationOptions.LongRunning);
但是,当我使用Task.Factory.StartNew
. 然而,当我使用它时Task.Run
,它可以正常工作,我认为它只是一个包装器Task.Factory.StartNew
(例如根据这篇 MSDN 文章)。
此处提供了一个工作示例,不同之处在于异常在使用时写入控制台Task.Run
,但在使用时不写入Factory.StartNew
。
我的问题是:
如果我有一个LongRunning
可能引发异常的任务,我应该如何在调用代码中处理它们?
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");
});
}