using System.Collections.Concurrent;
using System.Threading.Tasks;
public class MessageQueue<T>
private readonly ConcurrentQueue<T> _queue = new ConcurrentQueue<T>();
public void Enqueue(T message) => _queue.Enqueue(message);
public bool TryDequeue(out T message) => _queue.TryDequeue(out message);
public string Id { get; set; }
public string Source { get; set; }
public string Type { get; set; }
public DateTime Time { get; set; }
public object Data { get; set; }
public override string ToString() =>
$"CloudEvent(Id={Id}, Source={Source}, Type={Type}, Time={Time}, Data={Data})";
public static async Task Main(string[] args)
var messageQueue = new MessageQueue<CloudEvent>();