1. C# / Говнокод #16266

    +134

    1. 1
    IEventDetails evt = logger.GetEvent((Int32)((Object[])msg.ID)[0], (Int64)((Object[])msg.ID)[1]);

    Нашёл свой код бородатой давности в одном решении, в котором присутсвует дедлок, а лезть в код не хотелось.
    Вот теперь думаю, ковырять компонент дальше или пусть себе с дедлоком живёт.....

    Запостил: TauSigma, 01 Июля 2014

    Комментарии (12) RSS

    • deadlock? хде?
      Ответить
      • Дедлок я ещё не нашёл...
        Это что сразу глаза резануло.
        А используется это всё в стареньком озере потоков и msg передаётся из разных клиентов с разными параметрами.

        Я уже склоняюсь к мысли, что пора всё переписывать... Вот так выглядит объявление msg:
        internal enum EventsMessageId
        	{
        		Applications,
        		Events,
        		EventDetails,
        	}
        	internal class EventsMessage
        	{
        		public EventsMessageId Message { get; private set; }
        		public Object ID { get; private set; }
        
        		public EventsMessage(EventsMessageId message)
        			: this(message, null, null) { }
        		public EventsMessage(EventsMessageId message, Object id)
        		{
        			this.Message = message;
        			this.ID = id;
        		}
        	}

        Полиморфизм? Не, не слышал...
        Post/SendMessage какой-то получился...
        Ответить
        • так ID это Object или Object[] ?
          а то смысл (Object[])msg.ID)[0] мне не понятен
          Ответить
          • ID - это Object, который в потоке 2 раза кастуется в Object[] и распаковывается в Int32 и Int64...
            Ответить
          • Массив объектов может храниться в объекте
            Ответить
        • >>: this(message, null, null)
          Куда конструктор с 3 параметрами спрятал?
          Ответить
          • Там WPARAM в строковом виде.
            Прятать в ID ещё и String мне совести не хватило...
            Ответить
            • Можно поподробнее о том как ID юзается?
              Ответить
              • Если EventsMessageId.Application, то ID=null
                EventMessageId.Events, то ID={ApplicationId}
                EventMessageId.EventDetails, то ID=new Object[] { {ApplicationId}, {EventId}, };
                Ответить
                • new Object[] { {ApplicationId}, {EventId}, }; сурово

                  Id - хреновое имя для этой хуерги.
                  Ответить
        • public EventsMessage(EventsMessageId message, Object id)

          О, стало быть можно создать 100500 обьектов с одним ID... Недурно.

          : this(message, null, null)

          А можно и без ID. Код настолько гибкий что высказывает из рук)
          Ответить
    • Это какая то КАСТельвания
      Ответить

    Добавить комментарий