Tag: taskfactory

Task.Run和Task.Factory.StartNew之间的exception处理不同

我在使用Task.Factory.StartNew并尝试捕获抛出的exception时遇到了一个问题。 在我的应用程序中,我有一个长期运行的任务,我想封装在Task.Factory.StartNew(.., TaskCreationOptions.LongRunning); 但是,当我使用Task.Factory.StartNew时,不会捕获exception。 然而,当我使用Task.Run ,它正如我所期望的Task.Run ,我认为它只是Task.Factory.StartNew一个包装器(根据例如这篇MSDN文章 )。 这里提供了一个工作示例,区别在于在使用Task.Run时将exception写入控制台,但在使用Factory.StartNew时则不会。 我的问题是: 如果我有一个可以抛出exception的LongRunning任务,我应该如何在调用代码中处理它们? private static void Main(string[] args) { Task t = RunLongTask(); t.Wait(); Console.WriteLine(t.Result); Console.ReadKey(); } private async static Task 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 […]

使用Action 多个参数创建任务

我想在包含Action的Task中添加多个参数。 我回顾了现有的堆栈溢出问题使用Action 创建任务 请帮助我如何在任务中的Action方法中传递多个参数 Action action = (string msg, int count) => { Task.Factory.StartNew(async () => { await LoadAsync(msg, count); }); }; Task task = new Task(action, ….); 行动方法是 public static async Task LoadAsync(string message, int count) { await Task.Run(() => { Thread.Sleep(1500); }); Console.WriteLine(“{0} {1} Exceuted Successfully !”, message ?? string.Empty, (count == 0) […]