以下のコードの場合UIが動かなくなる

snippet.c
private void timer_MainSchedulerTimer_Tick(object sender, EventArgs e)
{
    this.timer_MainSchedulerTimer.Enabled = false;
 
    /* 待つ */
    Thread.Sleep(10 * 1000);
    Debug.WriteLine("waitt");
 
    this.timer_MainSchedulerTimer.Enabled = true;
}
 
 
以下のコードだと、UIは固まる。
asyncを付けても意味ない。
private async void timer_Tick(object sender, EventArgs e)
{
    this.timer_MainSchedulerTimer.Enabled = false;
 
    /* 待つ */
    Debug.WriteLine("Wait Start");
    Thread.Sleep(10 * 1000);
    Debug.WriteLine("Wait End");
 
    this.timer_MainSchedulerTimer.Enabled = true;
}
 
以下のコードだと、UIはかたまらない。
(awaitが使用される場合は, asyncを付けていないとコンパイルエラーが発生する)
private async void timer_Tick(object sender, EventArgs e)
{
    this.timer_MainSchedulerTimer.Enabled = false;
 
    /* 待つ */
    await Task.Run(() =>
    {
        Debug.WriteLine("Wait Start");
        Thread.Sleep(10 * 1000);
        Debug.WriteLine("Wait End");
    });
 
    this.timer_MainSchedulerTimer.Enabled = true;
}