Лучший способ преобразовать асинхронный метод на основе обратного вызова в ожидаемую задачу
Как лучше всего преобразовать / обернуть «классический» файл? асинхронный метод, который использует обратный вызов к чему-то, что возвращает (ожидаемое) задание?
Например, дан следующий метод:
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) в саму задачу (то есть сам вызов будет выполняться внутри задачи, а не синхронно)