Task.Delay(1000) (non-blocking) = Thread.Sleep(1000) (blocking)
Task.Wait() = Thread.Join()
Task.WaitAll(task1,task2,....,taskN) OR Task.Wait( task[] )
task1.Result = is blocking