I would like to send a list of messages to event hub in set number of threads i.e. 4 threads. I want the message to be send synchronously. The problem is that when I try to print out the payload some reason it does not print out the thread name, i.e. 1, 2, 3 and 0, on the second iteration onwards. Is there something that I'm doing wrong?
Thread 1 - Sending message 1
Thread 2 - Sending message 1
Thread 3 - Sending message 1
Thread 0 - Sending message 1
Thread - Sending message 2
Thread - Sending message 2
Thread - Sending message 2
Thread - Sending message 2
Thread - Sending message 3
Thread - Sending message 3
Thread - Sending message 3
Thread - Sending message 3
public static void Main(string[] args)
{
for (int i = 0; i < numberOfDevices; i++)
{
Thread thread = new Thread(() => { SendMessage(data); });
thread.Name = i.ToString();
listOfThreads.Add(thread);
}
}
private static void StartThreads(List<Thread> lstThreads)
{
foreach (Thread th in lstThreads)
{
th.Start();
}
}
private static void SendMessage(string payload)
{
var connectionStringBuilder = new EventHubsConnectionStringBuilder(EventHubConnectionString)
{
EntityPath = EventHubName
};
eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
SendMessagesToEventHub(payload);
eventHubClient.Close();
}
private static void SendMessagesToEventHub(string payload)
{
for (var i = 0; i < numberOfMsgs; i++)
{
try
{
var message = $"Message: {payload}";
Console.WriteLine($"Thread {Thread.CurrentThread.Name} - Sending message {i + 1}");
eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
}
catch (Exception exception)
{
Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
}
Task.Delay(interval);
}
}