The difference between Task.Factory.FromAsync and BeginX/EndX?

后端 未结 1 1345
失恋的感觉
失恋的感觉 2021-02-05 22:07

I have very similar code when using the standard BeginRead and EndRead methods from the TcpClient and using Task.Factory.FromAsync.

Here are some examples.. Error handli

1条回答
  •  天命终不由人
    2021-02-05 22:34

    I would much rather see Task based code:

    • It provides for composition more easily; for example, it's reasonably easy to write a method which takes a collection of Task tasks and returns another task which represents the majority verdict of those tasks. Likewise you can wait until any one of a collection of tasks has completed, etc.
    • It provides more flexible scheduling of where the continuation is run.
    • It allows the task itself to be returned with type safety and a lot more information than the somewhat anaemic IAsyncResult type returned by BeginRead.
    • It's simpler to specify error handling and cancellation with tasks than using the Begin/End model.
    • Task is getting better language support in C# 5 with async/await - if your codebase already uses Task pervasively, it'll be much easier to take advantage of this

    Basically in modern code running on .NET 4, Task is the idiomatic way of representing an on-going task. It's a much richer environment to work in than earlier attempts, and I would embrace it if you have the chance. Obviously if you're using .NET 3.5 or earlier, life is a bit harder, but I'm assuming that as you're asking the question, Task is an option...

    0 讨论(0)
提交回复
热议问题