【发布时间】:2014-06-13 05:02:50
【问题描述】:
将使用回调的“经典”异步方法转换/包装为返回(可等待)任务的东西的最佳方法是什么?
例如,给定以下方法:
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) 的调用封装在任务本身中(即调用本身将在任务内部运行而不是同步运行)
【问题讨论】:
-
顺便说一句,这不是“经典”的 .net 异步方法。这些是
BeginXxx()和EndXxx()对。另外,您为什么要寻找其他方法来做到这一点?你希望得到什么? -
我只是想确保我没有错过一些明显的替代方法来做同样的事情。
-
这里有什么理由使用
TrySetResult而不是SetResult吗?
标签: c# asynchronous task-parallel-library c#-5.0