我有一个类在其中异步使用 HttpWebRequest 并提供如下接口:
StartAsyncOperation(Action<TResult> onSuccess, Action<Exception> onError)
如果我将使用 HttpWebRequest.GetResponseAsync 重写这个类,我将获得什么好处,或者我可以像这里一样使用 TaskComplitionSource使用基于事件的异步模式上的任务并行库,它会好吗?
我有一个类在其中异步使用 HttpWebRequest 并提供如下接口:
StartAsyncOperation(Action<TResult> onSuccess, Action<Exception> onError)
如果我将使用 HttpWebRequest.GetResponseAsync 重写这个类,我将获得什么好处,或者我可以像这里一样使用 TaskComplitionSource使用基于事件的异步模式上的任务并行库,它会好吗?
假设您StartAsyncOperation
确实使用了异步操作(例如BeginGetResponse
/ EndGetResponse
),那么重写它并没有太大的好处。
现在做一个TaskCompletionSource
包装器很好。最终您可能会想要重写它以使用它,async
因为多年后onSuccess
/onError
模式对于习惯于async
.
如果您的代码遵循APM 模式 (BeginMethod / EndMethod),那么请TaskFactory.FromAsync
立即使用。
我建议不要使用TaskFactory.FromAsync
,而是将其包装在Async
后缀方法中,该方法可以在将来由async/await替换其实现。这样,您可以根据需要重构代码,而不仅仅是为了async/await。