In .NET, what thread will Events be handled in?

后端 未结 4 962
既然无缘
既然无缘 2020-12-08 13:17

I have attempted to implement a producer/consumer pattern in c#. I have a consumer thread that monitors a shared queue, and a producer thread that places items onto the sha

4条回答
  •  [愿得一人]
    2020-12-08 13:37

    After re-reading the question, I think I understand the problem now. You've basically got something like this:

    class Producer
    {
        public Producer(ExternalSource src)
        {
            src.OnData += externalSource_OnData;
        }
    
        private void externalSource_OnData(object sender, ExternalSourceDataEventArgs e)
        {
            // put e.Data onto the queue
        }
    }
    

    And then you've got a consumer thread that pulls stuff off that queue. The problem is that the OnData event is fired by your ExternalSource object - on whatever thread it happens to be running on.

    C# events are basically just an easy-to-use collection of delegates and "firing" an event just causes the runtime to loop through all of the delegates and fire them one at a time.

    So your OnData event handler is getting called on whatever thread the ExternalSource is running on.

提交回复
热议问题