LoginSignup
1
1

More than 1 year has passed since last update.

C#による音声の同期・非同期再生

Last updated at Posted at 2021-01-11

はじめに

この記事は,C#による音声の同期・非同期再生についてまとめた記事である.
主にC#入門者である自分の知識整理のためにまとめたものである.

同期再生・非同期再生とは

同期再生とは,音声の再生が終了まで他の処理を行わない再生方法である.
一方,非同期再生は,音声をバックグラウンドで再生する再生方法であるため,再生後も次の処理を行う.
音声を再生中に他の処理を行いたい場合,同期再生で再生してしまうと音声の再生のみ行われるが,非同期再生だと音声の再生と他の処理が同時に行える.

同期再生

synchro.cs
static string Method1(){
  //処理1を行う
  Thread.Sleep(3000);

  //処理2を行う
  return "hogehoge";
}

static void Method2(){
  //処理1を行う
  Thread.Sleep(3000);

  //処理2を行う
}

static void Main(string[] args){
  string result = Method1();
  Method2();
  Console.WriteLine(result);
  Console.ReadLine();
}

非同期再生

asynchro.cs
static async Task<string> Method1(){
  //処理1を行う
  await Task.Delay(3000);                       //(2)

  //処理2を行う
  return "hogehoge";
}

static void Method2(){
  //処理1を行う
  Thread.Sleep(3000);

  //処理2を行う
}

static async Task Main(string[] args){
  Task<string> task = Method1();                //(1)
  Method2();                                    //(3)
  Console.WriteLine(task.Result);               //(4)
  Console.ReadLine();
}

(1)
関数Method1に入る.
Task型かTask型のジェネリック.
Task型は、非同期メソッドの状態や戻り値を知ることができる.
<>は戻り値の型.

(2)
同期からの変更点.
awaitは、Task型を返す非同期メソッドが終了するまで待つ(3000ms待つ、という非同期メソッド).
awaitが付いているメソッドが実行されると一旦そのメソッドを抜け、メインに戻る
※awaitは戻り値がTask型のメソッドにしか付けることができない.
「Task.Delay」→引数で指定した秒数を待ち,その実行状態をTask型で返す非同期メソッド

(3)
Method1を一旦抜けて実行される.
その間にもTask.Delay(3000)は別スレッドで実行中.
Task.Delay(3000)の処理が終わったら、Method2が途中でもMethod1に戻り、文字列を返す

(4)
asyncメソッドの戻り値はTask型であるため、Resultプロパティで戻り値を取得できる.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1