Whenever a CPU is trying to execute an instruction, it is going to fetch the instruction, decode it, perform the operations and then write back the result. This entire thing is called as Instruction execution and this instruction execution is a kind of Atomic operation. Now, after one instruction is executed, CPU check the Interrupt Flag. If Interrupt Flag = 1, it will get into a Hardware Cycle, which will take control of CPU (i.e. no User process is executed during this time) and perform some certain actions. Since, we are moving from a User mode to Superior mode (OS/Kernel mode), we need to Store the Context of the processor (The CPU hardware thread only runs one program at a time, and it can context switch between multiple programs dozens, hundreds, or even thousands of times per second) such as Address of the Instruction where we have left, Program Status Word, Program Registers, etc. This information might change during the Interrupt Service Subroutine (which is executed in response to an interrupt).
Therefore, we just cant simply call ISR, as soon as, an interrupt is detected.
Hope, you are able to understand this.