using System.Threading.Tasks;
using System.Collections.Generic;
public abstract class Ping
public class WorkingPing : Ping, IPing
public async Task<bool> Ping()
public class BrokenPing : Ping, IPing
public async Task<bool> Ping()
throw new Exception("Ping Broken");
var pingTasks = new List<IPing>()
{new WorkingPing(), new BrokenPing(), new WorkingPing(), new BrokenPing()};
var pingResult = new List<bool>();
var tasks = pingTasks.Select(p => BufferCall(p));
var completedPings = await Task.WhenAll(tasks);
foreach (bool ping in completedPings)
Console.WriteLine(e.Message);
private async Task<bool> BufferCall(IPing ping)
return await ping.Ping();
Console.WriteLine(e.Message);
public static async Task Main()
var pingTest = new PingTest();