(待機可能な) タスクを返すものへのコールバックを使用する「クラシック」非同期メソッドを変換/ラップする最良の方法は何でしょうか?
たとえば、次のメソッドがあるとします。
public void GetStringFromUrl(string url, Action<string> onCompleted);
これをタスクを返すメソッドにラップする唯一の方法は次のとおりです。
public Task<string> GetStringFromUrl(string url)
{
var t = new TaskCompletionSource<string>();
GetStringFromUrl(url, s => t.TrySetResult(s));
return t.Task;
}
これがこれを達成する唯一の方法ですか?
また、GetStringFromUrl(url,callback) への呼び出しをタスク自体にラップする方法はありますか (つまり、呼び出し自体は同期ではなくタスク内で実行されます)。