C# で callback を受け付ける 関数を、async await に変換する

void Sample () {

  Hoge hoge = new Hoge ();
  hoge.OnSuccess += (sender, e) => {
    Console.WriteLine ("end");
  };

}
async Task Sample () {

  var taskCompletionSource = new TaskCompletionSource<string>();

  Hoge hoge = new Hoge ();
  hoge.OnSuccess += (sender, e) => { taskCompletionSource.SetResult ("YO!"); };

  var r = await taskCompletionSource.Task;

  Console.WriteLine (r); //< YO!
  Console.WriteLine ("end");
}