Если вы введете try-catch
внутри l oop, ваш l oop сможет продолжить зацикливание, даже если выброшено исключение:
static async Task Main(string[] args)
{
int i = 0;
while (true)
{
try
{
i++;
var task1 = WriteDouble(i);
var task2 = WriteString(i);
await Task.WhenAll(task1, task2);
await Task.Delay(10000);
}
catch (Exception ex)
{
}
}
}
ОБНОВЛЕНИЕ:
Мы Можно найти задачи, вызывающие исключения, используя Where
метод linq:
var throwers = tasks.Where(task => task.Exception != null);
Пример:
static void Main(string[] args)
{
Task.Run(async () =>
{
int i = 0;
var tasks = new List<Task>();
while (true)
{
try
{
i++;
var task1 = WriteDouble(i);
var task2 = WriteString(i);
tasks.Add(task1);
tasks.Add(task2);
await Task.WhenAll(tasks);
await Task.Delay(10000);
}
catch (Exception ex)
{
var throwers = tasks.Where(task => task.Exception != null);
var test = ex.Message;
}
}
}).GetAwaiter().GetResult();
}
И другие методы:
private static async Task WriteString(int i)
{
throw new Exception("Error");
await Task.Delay(1000); // 1 second delay
}
private static async Task WriteDouble(int i)
{
await Task.Delay(1000); // 1 second delay
}