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