Асинхронная отправка сообщений WCF

Реализовал метод асинхронной отправки сообщений клиентам, но он отправляет это сообщение абсолютно всем, в том числе и самому отправителю.

Как сделать так чтобы сообщение приходило всем кроме отправителя?

            public void AddMessage(byte[] message)
            {
                
                  IAsyncMessageCallback other = OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
                  other.BeginOnMessageAdded(message, DateTime.Now, delegate (IAsyncResult ar)
                        {
                            other.EndOnMessageAdded(ar);
                        }, null);
                

            }

Попытался сделать вот так, но получаются жутки тормоза при подключении больше двух клиентов и в конце концов разрыв канала передачи( без проверки разрывов ненаблюдалось)

            Dictionary<IAsyncMessageCallback, string> subscribers = new Dictionary<IAsyncMessageCallback, string>();
            public void Join(string username)
            {
                var connection = OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
                subscribers[connection] = username;

            }
            public void AddMessage(byte[] message)
            {
                lock (subscribers)
                {
                    var connection = OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();

                    string user;
                    if (!subscribers.TryGetValue(connection, out user))
                        return;
                    foreach (var other in subscribers.Keys)
                    {
                        //Console.WriteLine(other + " " + connection);
                        if (other == connection)
                            continue;
                        Console.WriteLine(other + " " + connection);
                        other.BeginOnMessageAdded(message, DateTime.Now, delegate (IAsyncResult ar)
                        {
                            other.EndOnMessageAdded(ar);
                        }, null);
                        Console.WriteLine(message.Length);
                    }
                }
              }

Может можно добавить асинхронность к Foreach?

Спасибо.


Ответы (0 шт):