Najlepszy sposób na konwersję metody asynchronicznej opartej na wywołaniu zwrotnym na oczekiwane zadanie
Jaki byłby najlepszy sposób na konwersję / zawinięcie „klasycznej” metody asynchronicznej, która używa wywołania zwrotnego do czegoś, co zwraca (oczekiwane) zadanie?
Na przykład, biorąc pod uwagę następującą metodę:
public void GetStringFromUrl(string url, Action<string> onCompleted);
Jedynym sposobem, jaki znam, aby zawinąć to w metodę zwracającą zadanie, jest:
public Task<string> GetStringFromUrl(string url)
{
var t = new TaskCompletionSource<string>();
GetStringFromUrl(url, s => t.TrySetResult(s));
return t.Task;
}
Czy to jedyny sposób, aby to osiągnąć?
Czy istnieje sposób na zawinięcie wywołania do GetStringFromUrl (url, callback) w samym zadaniu (tzn. Samo wywołanie uruchomiłoby się wewnątrz zadania zamiast synchronicznie)