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)
public bool TryDequeue(out T message)
return _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()
return $"CloudEvent(Id={Id}, Source={Source}, Type={Type}, Time={Time}, Data={Data})";
public static async Task Main(string[] args)
var messageQueue = new MessageQueue<CloudEvent>();