回答編集履歴

1 言い回しの修正

juner

juner score 11

2018/10/12 09:19  投稿

そもそもですが、
そちらの次の関数では、戻り値が void なので待つことができません。
※戻り値が void の場合の async は イベント向けに妥協案として用意されたものであってそれ以外で使うべきではありません。
```csharp
public async void SleepAsync(int milliseconds)
{
 await Task.Delay(milliseconds);
}
```
また、次のコードではawait しているわけではないので非同期に待つことはできません。
```csharp
while()
{
 SleepAsync(2000);
 console.WriteLine("待機終了");
}
```
で、どの様に対応すべきかですが、一つ目のコードの戻り値を Taskにしてください。
```csharp
public async Task SleepAsync(int milliseconds)
{
 await Task.Delay(milliseconds);
}
```
SleepAsync を await で待機してください。
```csharp
while()
{
 await SleepAsync(2000);
 console.WriteLine("待機終了");
}
```
以上。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る