如何将使用回调函数的“传统”异步方法转换/包装为返回(可等待的)任务的最佳方法?
例如,给定以下方法:
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)的调用(即调用本身将在任务内部异步运行而不是同步地运行)?
BeginXxx()
和EndXxx()
对。另外,你为什么要寻找其他做法呢?你希望得到什么? - svickTrySetResult
而不是SetResult
的原因吗? - Ben Huber