Suppose I have 3 domain events, Event1 Event2 and Event3. When command arrives at my Service Layer, I can rise 2 commands at the same time - e.g. Event1 and Event2. One Class has event listener for both events, but it should basically wait until both events are received to start processing it. Otherwise I need to execute expensive calculation 2 times (1st when event1 is received and 2nd time when event2 is received).
Is there some design pattern that can help me in this?
You might be looking for a process manager. A process manager is essentially a state machine that transitions from one state to the next when it receives an event, where each state describes the outstanding work that we're waiting on.
Udi Dahan wrote up a simplified demonstration in Saga Persistence and Event-Driven Architectures. (Udi uses "saga" where most of the community now uses process manager.)
Depending on the data structures you are using to communicate events to your event handlers, you might do well to separate the reading of events from the actions that you take. For instance, the Disruptor library is specifically designed for the idea that you would process a batch of events in memory, and then act on the changes when you reach the end of the batch.
In your case, that would mean that you usually process Event1 and Event2 together (saving the extra work), but in those cases where Event2 is delayed, the event handler can still provide a provisional answer within your SLA.