【发布时间】:2015-11-11 18:40:08
【问题描述】:
就我而言,我通过以下方式创建任务:
IList<Task> Tasks = new List<Task>();
Tasks.Add(Task.Run(async () => { await functionAsync();}));
我需要这些任务无限运行,以便不断处理一些传入数据。但是,如果发生一些致命错误/异常,我需要通过取消所有任务来结束程序。我整理了一个简单的例子来模拟我打算做什么,但它不起作用。我认为抛出异常时任务将被视为结束,并且 WaitAny 应该返回 AggregatedException,但它似乎并不是它的实际工作方式。那么,我怎样才能使它正确呢?
public static void Main(string[] args)
{
Console.WriteLine(nameof(Main));
for (int i = 1; i < 5; i++)
{
var i1 = i;
_tasks.Add(Task.Run(async () => { await Tryme(i1); }));
}
try
{
Task.WaitAny(_tasks.ToArray());
}
catch (Exception e)
{
Console.WriteLine("Stop my program if any of the task in _tasks throw exception");
Console.WriteLine(e);
}
Console.ReadLine();
}
private static async Task Tryme(int i)
{
Console.WriteLine($"I'm {i}");
if (i == 3)
{
Console.WriteLine($"{i} is throwing the exception");
throw new Exception("fake one");
}
await Task.Delay(TimeSpan.MaxValue);
}
【问题讨论】:
标签: c# .net async-await task-parallel-library