如何将接受回调函数作为参数的现有异步方法包装到任务并行库兼容方法中?
// Existing method
void DoAsync(Action<string> callback) {
...
}
// The desired method should have similar prototype
Task<string> DoAsync() {
// Internally this method should call existing
// version of DoAsync method (see above)
}
最佳答案
我假设您现有的 DoAsync
方法将异步运行。
在那种情况下,你可以这样包装它:
Task<string> DoAsyncTask()
{
var tcs = new TaskCompletionSource<string>();
DoAsync(result => tcs.TrySetResult(result));
return tcs.Task;
}
我不明白你现有的 DoAsync
方法报告异步错误。您可以使用 TaskCompletionSource<T>.TrySetException
必要时报告异步错误。
关于.net - 将现有异步方法包装成 TPL 兼容方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791956/