Most likely, all four threads will execute:
this.StartIndexCrawling(1, 3, 3 + 1, evs[4]);
This has to do with your use of closures. All four threads will be bound to the variable i
and use whatever value it has once the code is executed (and not the value when the Thread
object is created).
Your code is unlikely to work if all four threads use the same value.