C#学习教程:Task.Factory.FromAsync和BeginX / EndX之间的区别?分享


Task.Factory.FromAsync和BeginX / EndX之间的区别?

当使用TcpClient中的标准BeginRead和EndRead方法并使用Task.Factory.FromAsync时,我有非常相似的代码。

以下是一些示例..error handling代码未显示。

Task.Factory.FromAsync:

private void Read(State state) { Task read = Task.Factory.FromAsync(state.Stream.BeginRead, state.Stream.EndRead, state.Bytes, state.BytesRead, state.Bytes.Length - state.BytesRead, state, TaskCreationOptions.AttachedToParent); read.ContinueWith(FinishRead); } private void FinishRead(Task read) { State state = (State)read.AsyncState; state.BytesRead += read.Result; } 

使用BeginRead和EndRead标准使用回调:

 private void Read(State state) { client.BeginRead(state.Bytes, state.BytesRead, state.Bytes.Length - state.Bytes.Read, FinishRead, state); } private void FinishRead(IAsyncResult async) { State state = (State)async.AsyncState; state.BytesRead += state.Stream.EndRead(async); } 

这两个都很好,但我很好奇他们的差异。 两者的代码行几乎相同,它们似乎都执行完全相同的function并具有相同的效率。 哪个更好? 您更愿意在生产代码中看到什么?

我更愿意看到基于Task的代码:

基本上在.NET 4上运行的现代代码中, Task是表示正在进行的任务的惯用方法。 与早期的尝试相比,这是一个更富裕的工作环境,如果你有机会,我会接受它。 显然,如果您使用的是.NET 3.5或更早版本,生活会有点困难,但我假设您在提问时, Task是一个选项……

上述就是C#学习教程:Task.Factory.FromAsync和BeginX / EndX之间的区别?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031540.html

发表评论

邮箱地址不会被公开。 必填项已用*标注